澳门威利斯人PHP对表单提交特殊字符的过滤和处理方法汇总

下面针对常用表单特殊字符处理进行总结:

PHP关于表单提交特殊字符的处理方法做个汇总,主要涉及htmlspecialchars/addslashes/stripslashes/strip_tags/mysql_real_escape_string等几个函数联合使用,与大家共同交流。

例1

php 过滤特殊字符及sql防注入代码
<?php
//方法一
//过滤’,”,sql语名
addslashes();

今天写的代码给项目经理看了下,因为之前没有考虑sql注入的问题,澳门威利斯人 1然后在他测试我的code的时候,打了一个“’”,然后我的程序就挂了!

测试字符串:

一、几个与特殊字符处理有关的PHP函数

 

//方法二,去除所有html标签

于是乎,我在网上找到了一个验证并过滤文本框的jquery!

 代码如下

函数名

释义

介绍

htmlspecialchars

将与、单双引号、大于和小于号化成HTML格式

&转成&
"转成"
‘ 转成’
<转成<
>转成>

htmlentities()

所有字符都转成HTML格式

除上面htmlspecialchars字符外,还包括双字节字符显示成编码等。

 

 

 

addslashes

单双引号、反斜线及NULL加上反斜线转义

被改的字符包括单引号(‘)、双引号(")、反斜线backslash (\) 以及空字符NULL。

stripslashes

去掉反斜线字符

去掉字符串中的反斜线字符。若是连续二个反斜线,则去掉一个,留下一个。若只有一个反斜线,就直接去掉。

 

 

 

quotemeta

加入引用符号

将字符串中含有. \\ + * ? [ ^ ] ( $ ) 等字符的前面加入反斜线"\" 符号。

nl2br()

将换行字符转成

 

strip_tags

去掉HTML及PHP标记

去掉字符串中任何HTML标记和PHP标记,包括标记封堵之间的内容。注意如果字符串HTML及PHP标签存在错误,也会返回错误。

mysql_real_escape_string

转义SQL字符串中的特殊字符

转义\x00 \n \r 空格 \ ‘ " \x1a,针对多字节字符处理很有效。mysql_real_escape_string会判断字符集,mysql_escape_string则不用考虑。

 代码如下

strip_tags();

先上图:

$dbstr=’D:test
<a
href=”
‘!=’1’ OR ‘1’
</DIV>
<script  language=”javascript”
type=”text/javascript”>alert(“Fail”);</script>

您可能感兴趣的文章:

  • php中一个完整表单处理实现代码
  • php 多个submit提交表单
    处理方法
  • php实现表单多按钮提交action的处理方法
  • php中关于普通表单多文件上传的处理方法
  • PHP更新购物车数量(表单部分/PHP处理部分)
  • PHP中使用php://input处理相同name值的表单数据
  • PHP处理大量表单字段的便捷方法
  • PHP简单处理表单输入的特殊字符的方法
  • ThinkPHP中处理表单中的注意事项
  • php表单处理操作

function uhtml($str) 

    $farr = array( 
        “/s+/”, //过滤多余空白 
         //过滤
<script>等可能引入恶意内容或恶意改变显示布局的代码,如果不需要插入flash等,还

//方法三过滤可能产生代码

澳门威利斯人 2

<?php echo “<br/>PHP OUTPUT”; ?>’;

可以加入<object>的过滤 
       
“/<(/?)(script|i?frame|style|html|body|title|link|meta|?|%)([^>]*?)>/isU”,
       
“/(<[^>]*)on[a-zA-Z]+s*=([^>]*>)/isU”,//过滤javascript的on事件 
   ); 
   $tarr = array( 
        ” “, 
        “<123>”,//如果要直接清除不安全的标签,这里可以留空 
        “12”, 
   ); 
  $str = preg_replace( $farr,$tarr,$str); 
   return $str; 
}

function php_sava($str)
{
    $farr = array(
       
“/s+/”,                                                                                         
       
“/<(/?)(script|i?frame|style|html|body|title|link|meta|?|%)([^>]*?)>/isU”,  
       
“/(<[^>]*)on[a-zA-Z]+s*=([^>]*>)/isU”,                                     
     
   );
   $tarr = array(
        ” “,
        “<\1\2\3>”,          
//如果要直接清除不安全的标签,这里可以留空
        “\1\2”,
   );

PS:这里用@#测试,因为’太小了,都看不清楚了!

测试代码:

例2
或者这样操作

  $str = preg_replace( $farr,$tarr,$str);
   return $str;
}

具体的jquery代码:

 代码如下

 代码如下

//php sql防注入代码

<script type="text/javascript" language="javascript">
 $(document).ready(function() {
  //返回
  $("#btnBack").click(function() {
   location.href = "${basePath}/user/user_List.jspx?action=peek";
  });

  //非空验证
  $("#btnSubmit").click(function(){
   if($("#name").val() == ""){
    alert("姓名必填!");
    $("#name").focus();
    return false;
   }

   //js验证 `~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?
   var pattern = new RegExp("[~'!@#$%^&*()-+_=:]");
   if($("#name").val() != "" && $("#name").val() != null){
    if(pattern.test($("#name").val())){
     alert("非法字符!");
     $("#name").attr("value","");
     $("#name").focus();
     return false;
    }
   }

   if($("#enterDate").val() == ""){
    alert("入职时间必填!");
    return false;
   }
  });

  //是否存在用户名
  var existName = '${action_msg}';
  if(existName != "" && existName != null){
   $("#span_").attr("style","display:block");
   $("#span_").attr("style","color:red");
   $("#span_").html("用户名"+existName+"已经存在!换~~");
  }else{
   $("#span_").attr("style","display:none");
  }
 });
</script>

 header(“Content-Type: text/html; charset=UTF-8”);
echo
“——————————————————<br/>rn”;
echo 
$dbstr.”<br/>rn——————————————————<br/>rn”;
$str=fnAddSlashes($_POST[‘dd’]);
echo
$str.”<br/>rn——————————————————<br/>rn”;

//get post data
 function PostGet($str,$post=0)
 {
  empty($str)?die(‘para is null’.$str.’!’):”;
  
  if( $post )
  {
   if( get_magic_quotes_gpc() )
   {
    return htmlspecialchars(isset($_POST[$str])?$_POST

class sqlin
{

这是以弹框的形式!

$str = preg_replace(“/s(?=s)/”,”\1″,$str);//多个连续空格只保留一个
澳门威利斯人 ,$str = str_replace(“r”,”<br/>”,$str);
$str = str_replace(“n”,”<br/>”,$str);
$str = preg_replace(“/((<br/?>)+)/i”, “<br/>”,
$str);//多个连续<br/>标签只保留一个

[$str]:”);
   }
   else
   {
    return addslashes(htmlspecialchars(isset($_POST[$str])?

//dowith_sql($value)
function dowith_sql($str)
{
   $str = str_replace(“and”,””,$str);
   $str = str_replace(“execute”,””,$str);
   $str = str_replace(“update”,””,$str);
   $str = str_replace(“count”,””,$str);
   $str = str_replace(“chr”,””,$str);
   $str = str_replace(“mid”,””,$str);
   $str = str_replace(“master”,””,$str);
   $str = str_replace(“truncate”,””,$str);
   $str = str_replace(“char”,””,$str);
   $str = str_replace(“declare”,””,$str);
   $str = str_replace(“select”,””,$str);
   $str = str_replace(“create”,””,$str);
   $str = str_replace(“delete”,””,$str);
   $str = str_replace(“insert”,””,$str);
   $str = str_replace(“‘”,””,$str);
   $str = str_replace(“””,””,$str);
   $str = str_replace(” “,””,$str);
   $str = str_replace(“or”,””,$str);
   $str = str_replace(“=”,””,$str);
   $str = str_replace(“%20″,””,$str);
   //echo $str;
   return $str;
}
//aticle()防SQL注入函数//php教程
function sqlin()
{
   foreach ($_GET as $key=>$value)
   {
       $_GET[$key]=$this->dowith_sql($value);
   }
   foreach ($_POST as $key=>$value)
   {
       $_POST[$key]=$this->dowith_sql($value);
   }
}
}

$(document).ready(function(){
  //过滤非法字符
  function stripscript(s){ 
   var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]") 
   var rs = ""; 
   for (var i = 0; i < s.length; i++) { 
    rs = rs+s.substr(i, 1).replace(pattern, ''); 
   } 
  return rs; 
  } 

  //批量删除
  $("#btnDel").click(function() {
   if(confirm("确认删除?")){
     var lstInt = new Array();
     var index = 0;
     $("input[name='checkbox']:checked").each(function() {
       lstInt[index] = $(this).attr("value");
       index++;
     });
     if (lstInt.length <= 0) {
      alert("你还没有选择!");
      return;
     }
     if (lstInt != null&& lstInt.length > 0) {
      location.href = '${basePath}/user/delUser.jspx?idLst=' + lstInt;
     }
    }
   });


  // 全选
  $("#allCheck").click(function() {
   $("#notAllCheck").attr("checked", "");
   $("input[name='checkbox']").not("input:checked").each(function() {
    $(this).attr("checked", "checked");
   });
  });
  // 全不选
  $("#notAllCheck").click(function() {
   $("#allCheck").attr("checked", "");
   $("input[name='checkbox']:checked").each(function() {
    $(this).attr("checked", "");
   });
  });

  //查询
  $("#btnSelect").click(function(){
   if($("#inputName").val() == "" || $("#inputName").val() == "请输入员工姓名!"){
    alert("请输入员工姓名![支持模糊匹配]");
    $("#inputName").focus();
   }else if($("#inputName").val() == "'" ){
    alert("输入非法字符!");
    $("#inputName").focus();
    $("#inputName").attr("value","");
   }else{
    var name = $("#inputName").val();
    location.href="user_List.jspx?inputName="+stripscript(name);
   }
  });

  //友情提示
  $("#inputName").blur(function(){
   if($("#inputName").val() == ""){
    $(this).attr("value","请输入员工姓名!");
   }
   $(this).css("color","#D6D6FF");
  });

  $("#inputName").focus(function(){
   if($("#inputName").val() == "请输入员工姓名!"){
    $(this).attr("value","");
   }
   $(this).css("color","#6699FF");
  });

  var name = '${name}';
  if(name != '' && name != null){
   $("#inputName").attr("value",name);
  }

  $("#btnBackIndex").click(function(){
   location.href="user_List.jspx";
  });
 });

$str=stripslashes($str);
echo
strip_tags($str).”<br/>rn——————————————————<br/>rn”;
echo
htmlspecialchars($str).”<br/>rn——————————————————<br/>rn”;
echo
htmlentities($str).”<br/>rn——————————————————<br/>rn”;
echo
mysql_escape_string($str).”<br/>rn——————————————————<br/>rn”;

$_POST[$str]:”));
   }
   
  }
  else
  {
   if( get_magic_quotes_gpc() )
   {
    return htmlspecialchars(isset($_GET[$str])?$_GET[$str]:”); 
   }
   else
   {
    return addslashes(htmlspecialchars(isset($_GET[$str])?

$dbsql=new sqlin();

这是用空格来替换!

字符串包含:反斜杠路径,单双引号,HTML标记、链接、未封堵的HTML标记,数据库语法容错,JS执行判断,PHP执行判断,多个连续回车换行符和空格。其中有些概念有包含关系

$_GET[$str]:”)); 
   }
  }
 }

?>

使用方式:
将以上代码复制新建一个sqlin.php的文件,然后包含在有GET或者POST数据接收的页面
原理:
将所有的SQL关键字替换为空
本代码在留言本中不能使用,若要在留言本中使用请替换其中的
…….
$str = str_replace(“and”,””,$str);

$str = str_replace(“%20″,””,$str);

的代码为:
$str = str_replace(“and”,”and”,$str);
$str = str_replace(“execute”,”execute”,$str);
$str = str_replace(“update”,”update”,$str);
$str = str_replace(“count”,”count”,$str);
$str = str_replace(“chr”,”chr”,$str);
$str = str_replace(“mid”,”mid”,$str);
$str = str_replace(“master”,”master”,$str);
$str = str_replace(“truncate”,”truncate”,$str);
$str = str_replace(“char”,”char”,$str);
$str = str_replace(“declare”,”declare”,$str);
$str = str_replace(“select”,”select”,$str);
$str = str_replace(“create”,”create”,$str);
$str = str_replace(“delete”,”delete”,$str);
$str = str_replace(“insert”,”insert”,$str);
$str = str_replace(“‘”,”'”,$str);
$str = str_replace(“””,”"”,$str);

 

?>

以上这篇jquery过滤特殊字符’,防sql注入的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

二、表单提交数据处理
1、强制加入反斜线

您可能感兴趣的文章:

  • SQL注入绕过的技巧总结
  • 浅谈mybatis中的#和$的区别
    以及防止sql注入的方法
  • SQL注入之基于布尔的盲注详解
  • sql注入之手工注入示例详解
  • java
    过滤器filter防sql注入的实现代码
  • php简单实现sql防注入的方法
  • Sql注入原理简介_动力节点Java学院整理

由于有些主机默认开启魔术引用get_magic_quotes_gpc,有些可能关闭,所以在程序上最好一律强制加入反斜线,这样可以统一处理,字符涉及单引号、双引号和反斜线。

 代码如下

function fnAddSlashes($data)
{
    if(!get_magic_quotes_gpc())
//只对POST/GET/cookie过来的数据增加转义
        return
is_array($data)?array_map(‘addslashes’,$data):addslashes($data);
    else
        return $data;
}

2、对特殊字符处理

以下是几个常用字符串处理,可以视具体情况取舍。由于上面已经对提交表单数据进行一次转义,所以如果需要对内容替换或过滤需要考虑addslashes对相关字符的影响,替换或查找时需考虑反斜杠的添加。其它字符替换不影响,比如rn替换。

A、多个连续空格只保留一个

 代码如下

$data = preg_replace(“/s(?=s)/”,”\1″,$data );//多个连续空格只保留一个

B、回车换行替换成<br/>

 代码如下

$data = str_replace(“r”,”<br/>”,$data );
$data = str_replace(“n”,”<br/>”,$data );

//html中默认<br>没封堵,xhtml中<br/>有封堵,建议使用<br/>,更多区别:

C、多个连续<br/>只保留一个

 代码如下

$data = preg_replace(“/((<br/?>)+)/i”, “<br/>”, $data
);//多个连续<br/>标签只保留一个

 

D、全部过滤HTML标记

该方式是全部过滤潜在危险的标记,包括HTML、链接、未封堵HTML标记、JS、PHP。

使用函数strip_tags($data)

该函数使用后会过滤全部的HTML标记(包括链接)和PHP标记、JS代码等,其中链接会保留链接原文只是去除<a>标记和href部分内容,PHP标记和JS标记则会整体去除,包括中间的内容,如下图:

E、不过滤标记,只是把他们HTML化

该方法是把原提交内容全部按照普通文本来处理。

使用函数htmlspecialchars($data),该函数执行后会把提交数据全部按照普通文本来展示,如下图:

使用htmlentities函数执行结果(中文显示乱码):

三、写入数据库

由于使用addslashes($data)后对于高级的可信任用户可以直接写入数据库,但是addslashes无法拦截使用0xbf27代替的单引号,所以最好还是使用mysql_real_escape_string或mysql_escape_string进行转义,不过转义之前需先去除反斜杠(假设已默认开启addslashes)。

 代码如下

function fnEscapeStr($data)

{

if (get_magic_quotes_gpc())
{
        $data= stripslashes($value);
}
$data=”‘”. mysql_escape_string($value) .”‘”;
return $data;
}

$data=fnEscapeStr($data);

PHP通用防注入安全代码

 代码如下

说明:
判断传递的变量中是否含有非法字符
如$_POST、$_GET
功能:
防注入
**************************/
//要过滤的非法字符
$ArrFiltrate=array(”‘”,”;”,”union”);
//出错后要跳转的url,不填则默认前一页
$StrGoUrl=””;
//是否存在数组中的值
function FunStringExist($StrFiltrate,$ArrFiltrate){
foreach ($ArrFiltrate as
$key=>$value){
if (eregi($value,$StrFiltrate)){
return true;
}
}
return false;
}
//合并$_POST 和 $_GET
if(function_exists(array_merge)){
$ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);
}else{
foreach($HTTP_POST_VARS as $key=>$value){
$ArrPostAndGet[]=$value;
}
foreach($HTTP_GET_VARS as $key=>$value){
$ArrPostAndGet[]=$value;
}
}
//验证开始
foreach($ArrPostAndGet as $key=>$value){
if (FunStringExist($value,$ArrFiltrate)){
echo “alert(/”Neeao提示,非法字符/”);”;
if (empty($StrGoUrl)){
echo “history.go(-1);”;
}else{
echo “window.location=/””.$StrGoUrl.”/”;”;
}
exit;
}
}
?>

/*************************
保存为checkpostandget.php
然后在每个php文件前加include(“checkpostandget.php“);即可

相关文章