php 过滤特殊字符及sql防注入代码

 更新时间:2016年11月25日 15:25  点击:1870

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

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

strip_tags();

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

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",
   );

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

//php sql防注入代码

class sqlin
{

//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);
   }
}
}

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

$str = str_replace("%20","",$str);
...
的代码为:
$str = str_replace("and","&#97;nd",$str);
$str = str_replace("execute","&#101;xecute",$str);
$str = str_replace("update","&#117;pdate",$str);
$str = str_replace("count","&#99;ount",$str);
$str = str_replace("chr","&#99;hr",$str);
$str = str_replace("mid","&#109;id",$str);
$str = str_replace("master","&#109;aster",$str);
$str = str_replace("truncate","&#116;runcate",$str);
$str = str_replace("char","&#99;har",$str);
$str = str_replace("declare","&#100;eclare",$str);
$str = str_replace("select","&#115;elect",$str);
$str = str_replace("create","&#99;reate",$str);
$str = str_replace("delete","&#100;elete",$str);
$str = str_replace("insert","&#105;nsert",$str);
$str = str_replace("'","&#39;",$str);
$str = str_replace(""","&#34;",$str);

 

?>

str_replace只替换一次代码

$str ="中国|111cn.net|111cn.net|111cn.net|jkldajfklda李好,美女,世界中国中国中国

中国中国abc,dee";
$str1=array(
  array('111cn.net','/phper.html'),
  array('中国','/phper.html'),
  array('李好','/phper.html'),
  array('dee','/phper.html'),
  array('abc','/phper.html')
  );
//$temp = str_replace('111cn.net','前程似锦',$str,$a);
    $count =0;
 foreach($str1 as $nkeys){    
   if(strpos($str,$nkeys[0]) ){
    if( $count <=1 ){
     $str=preg_replace("/$nkeys[0]/","<a

href=http://111cn.net.com".$nkeys[1]." target=_blank >".$nkeys

[0]."</a>",$str,1);     $count++;
     continue ;
    }
    
    
    
   }
    
  }
 echo $count,$str;
//preg_replace(【要替换的关键字】, 【替换为的关键字】, 【原字符串】, 【替换次数

】);
//方法二:

function str_replace_once($needle, $replace, $haystack) {

   $pos = strpos($haystack, $needle);

   if ($pos === false) {

      return $haystack;

   }

   return substr_replace($haystack, $replace, $pos, strlen($needle));

}

php简单数据保存程序


<form id="form1" name="form1" method="post" action="">
  <label>
  <input type="text" name="cname" />
  </label>
  <p>
    <label>
    <input type="text" name="caddress" />
    </label>
  <label>
    <input type="text" name="ctel" />
    </label>
  <label>
    <input type="text" name="cfix" />
    </label>
  <label>
    <input type="text" name="cmail" />
    </label>
  </p>
</form>
<?php
include(dirname(__FILE__).'./inc/gg_function.php');

if( $_POST)
{
 $_cname = Get_value('cname',1);
 $_address = Get_value('caddress',1);
 $_tel = Get_value('ctel',1);
 $_fix = Get_value('cfix',1);
 $_mail = Get_value('cmail',1);
 
 
 if( empty($_cname) || strlen( $_cname )>200 )
 {
  ShowMsg('请输入公司名称!');
 }
 elseif( empty( $_address ) || strlen( $_address )>200 )
 {
  ShowMsg('请输入公司地址!');
 }
 elseif( empty( $_tel ) || strlen($_tel)>12 )
 {
  ShowMsg('请输入正确的电话号码');
 }
 elseif( empty($_fix) || strlen( $_fix )>20 )
 {
  ShowMsg('输入传真号');
 }
 elseif( empty( $_mail ) || strlen( $_mail )>254 )
 {
  ShowMsg('输入正确的邮件地址');
 }
 else{
  $_sql = "Insert into gx_coo(c_name,c_address,c_tel,c_fix,c_maile)value('$_cname','$_address','$_tel','$_fix','$_mail')";
  if( mysql_query( $_sql ) )
  {
   ShowMsg('信息保存成功!');
  }
  else
  {
   
   ShowMsg('操作失败请重试一次!');
  }
 }
}
?>

本文章免费提供一款asp防sql注入源程序看,方法比较简单就是接收query的值进行过滤哦。

<%
squery=lcase(Request.ServerVariables("QUERY_STRING"))
sURL=lcase(Request.ServerVariables("HTTP_HOST"))
SQL_injdata =":|;|>|<|--|sp_|xp_||dir|cmd|^|(|)|+|$|'|copy|format|and|exec|insert|select|delete|update|count|*|chr|mid|master|truncate|char|declare"
SQL_inj = split(SQL_Injdata,"|")
For SQL_Data=0 To Ubound(SQL_inj)
if instr(squery&sURL,Sql_Inj(Sql_DATA))>0 Then
Response.Write "您的操作可能是SQL注入行为。"
Response.end
end if
next
%>

我自己觉得还有防sql注入的方法,那就是用trim()函数,去除所有querystring过来的值的空格,因为sql执行必须带有空格哦,还有如果是id类型的判断是否为数字就OK了。

好了为php开发者提供了一款php sql 防注入与字符过滤以及各种过滤代码哦。

//==防注入自动过滤[启用后程序效率低]==========================================================================================
/*
function inject_checks($sql_str){return eregi('select|insert|update|delete|'|/*|*|../|./|union|into|load_file|outfile', $sql_str);}
foreach ($_REQUEST as $value){if (inject_checks($value)){echo "<script language=javascript>alert('你提交的数据非法,请检查后重新提交!');</script>";exit;}}
*/
//==防注[inject_check($sql_str)]==========================================================================================
function inject_check($sql_str){
if (eregi('select|insert|update|delete|union|into|load_file|outfile', $sql_str)){echo "<script language=javascript>alert('你提交的数据非法,请检查后重新提交!');</script>";exit;}
return $sql_str;
}
//==字符过滤[safe_convert($string)]==============================================================================
function safe_convert($string){ //Words Filter
if(get_magic_quotes_gpc()){ //转义字符 加上反斜线
        $string=htmlspecialchars($string, ENT_QUOTES); //将特殊字元转成HTML字串格式如 "&"转成"&amp;"
        $string=str_replace("<","&lt;",$string); //替换
        $string=str_replace(">","&gt;",$string); //替换
        $string=str_replace("\", '&#92;', $string); //替换  
    } else {
        $string=addslashes($string); //转义字符 加上反斜线 //$string=stripslashes($string); //去掉反斜线
        $string=str_replace("\\", '&#92;', $string);
    }
    //$string=str_replace("r","<br/>",$string); //换行
    //$string=str_replace("n","",$string); //空格
    $string=str_replace("t","&nbsp;&nbsp;",$string); //空格
    $string=str_replace("  "," &nbsp;",$string); //空格
    //$string=str_replace('|', '&#124;', $string); //替换 同分类系统有冲突
    $string=str_replace("&amp;#96;","&#96;",$string); //替换
    $string=str_replace("&amp;#92;","&#92;",$string); //替换
    return $string;
}
//==字符反过滤[unsafe_convert($string)]==============================================================================
function unsafe_convert($string){ //Words Filter
    $string=str_replace("&#92;&quot;","&quot;",$string); //替换
    return $string;
}

//==字符过滤[filter($string)]============================================================================================
function filter($string){ //Words Filter
include("Filter.php");//词汇过滤列表
foreach($badwords as $badword){
if(stristr($string,$badword)==true){echo "<script language=javascript>alert('警告:你提交的内容含有敏感字眼,请更换内容。');</script>";exit;}
}
return $string;
}

[!--infotagslink--]

相关文章

  • php sql防注入以及 html 过滤安全函数

    方法一过滤html自定义函数 代码如下 复制代码 function ihtmlspecialchars($string) { if(is_array($string)) { foreach($string as $key =>...2016-11-25
  • C# XML字符串包含特殊字符的处理转换方法小结

    今天用C#输出XML文件时,发现报错,经过反复检查调试,发现是因为某处内容含有某些特殊字符,这些特殊字符是在XML里不被允许的...2020-11-03
  • url地址参数里带有?,&等特殊字符怎么办

    在使用url进行参数传递时,经常会传递一些 中文名(或含有特殊字符)的参数或URL地址,在后台处理时会发生转换错误。在有些传递页面使用GB2312,而在接收页面使用UTF8,这样接收到的参 数就可能会与原来发生不一致。使用服务器端的urlEncode函数编码的URL,与使用客户端java的encodeURI函数编码的URL,结果就不 一样。...2014-04-27
  • 两种方法解决javascript url post 特殊字符转义 + & #

    本文主要介绍javascript使用url传值的时候数据丢失的问题,希望对大家有所帮助。...2016-04-16
  • php防注入过滤客户提交$_GET 和$_POST参数

    下面一款防止php页面给sql注入的一个程序代码,有需要的朋友可参考。 以下代码实现过滤php的$_GET 和$_POST参数 代码如下 复制代码 /** *...2016-11-25
  • c#转义字符串中的所有正则特殊字符方法示例

    这篇文章主要介绍了c#转义字符串中的所有正则特殊字符,大家可以参考使用...2020-06-25
  • 正则中需要转义的特殊字符小结

    正则表达式中的特殊字符,就是一些有特殊含义的字符,如“*.txt”中的*,简单的说就是表示任何字符串的意思...2021-05-07
  • 网站防注入与挂马 PHP.INI 安全设置

    当要在防止页面攻击时,可在页面的头部include防攻击文件,就像通用防注入文件。我们可以用三种情况来办到: 1、在每个文件内引用。这样的文件是可以,不过如果一个网站内有...2016-11-25
  • MySQL创建带特殊字符的数据库名称方法示例

    这篇文章主要给大家介绍了MySQL创建带特殊字符的数据库名称方法,文中给出了详细的示例代码,需要的朋友可以参考学习,下面来一起看看吧。...2017-03-14
  • C#简单的特殊输出实例

    这篇文章主要介绍了C#简单的特殊输出,以实例实现了针对一些特殊字符与位置的输出控制,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • jquery过滤特殊字符',防sql注入的实现方法

    下面小编就为大家带来一篇jquery过滤特殊字符',防sql注入的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-08-24
  • Php $_POST、$_GET防注入程序

    这段程序代码是一款php $_POST、$_GET防注入程序哦,以前我们也写过很多sql防注入程序,下面来看看这款防注入的php代码吧。 <? /************************* 说明:...2016-11-25
  • PHP正则表达式中的特殊字符详解

    在php正则表达式中包括了大量的特殊字符,像有字符/,字符^,字符$,字符+ ,字符?,字符. ,字符x│y,字符{ n } 等等这些字符我们称作为特殊字符,因为它们不可以直接用平常的方法...2016-11-25
  • mysql密码中有特殊字符&在命令行下登录的操作

    这篇文章主要介绍了mysql密码中有特殊字符&在命令行下登录的操作,具有很好的参考价值希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
  • 经典php防注入函数代码

    <?php教程 /************************* 说明: 判断传递的变量中是否含有非法字符 如$_post、$_get 功能: 防注入 **************************/ //要过...2016-11-25
  • PHP防注入函数代码总结

    在php中防注入一般会写一个全局文件用来过滤特殊的字符串,本文章来总结了各种各样的php防注入函数代码,同时还可防sql注入大家可参考。 为了安全,我们常用到下面的函...2016-11-25
  • php sql注入与防注入经典案例分析

    对于sql注入与防注入其实就是一个攻与防的,今天我们要告诉大家最基本的注入和防止方法,原理都是利用了php或mysql的一些特性而我们没注意所造成的。 一个简单的SQL...2016-11-25
  • PHP简单处理表单输入的特殊字符的方法

    这篇文章主要介绍了PHP简单处理表单输入的特殊字符的方法,涉及PHP中trim(),strip_tags(),htmlspecialchars()及addslashes()等函数的使用技巧,需要的朋友可以参考下...2016-02-05
  • 5个对网页特殊限制设置的技巧

    1.网页不允许脱机浏览<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 2.文字不允许被打印<style>@media print {.notptn {display:none;}}</style><div class...2016-09-20
  • php防注入式攻击心得

    一: 这个话题太老生常谈了. 在PHP.INI中将magic_quotes_gpc = On 确实能防得住一些注入式攻击,但这是不是万能的? 我们现在是将POST或者GET收到的变量,将其...2016-11-25