如下:这是一个防止用户输入的数据中包含SQL的一些关键字的正则表达式

        之前一直认为这写的很正确,没多大的问题,而且自己测试也没问题,

    因为关键字包含 And,而如果用户输入andy的时候呢,汗,所以还得结合

    SQL的一些特点来对这个正则表达式进行修改

 

注:\s:在正则表达式中表示空格;正则表达式最后的小"i"表示不区分大小写

做出的修改是:select,insert,update,delete这几个关键字,使用的时候前面有可能有或没有空格,但后面必须有一个空格,

                   所以变成 [\s]*select\s

                 而and,or,union这些,因为必须前面一个空格,后面一个空格才能生效

                   所以改成 \sand\s

 

function inject_check($Sql_Str) {//检查Sql的注入语句,各种关键字。

       //原来是这样的:/select|insert|update|delete|and|or|\'|\\*|\*|\.\.\/|\.\/|union|into|load_file|outfile/i
      //$check=preg_match('/[\s]*select\s|[\s]*insert\s|[\s]*update\s|                        [\s]*delete\s|\sand\s|\sor\s|\'|\\*|\*|\.\.\/|\.\/|\sunion\s|\sinto\s|load_file|outfile/i',$Sql_Str);

       //不过这样太难看了,所以稍微修改一下,

         $check=preg_match('/[\s]*(select|insert|update|delete)\s|\s(and|or|join|like|regexp|where|union|into)\s|\#|\'|\\*|\*|\.\.\/|\.\/|load_file|outfile/i',$Sql_Str);
      if ($check) {
           echo '<script language="JavaScript">alert("Warnning!!\r\n'.$Sql_Str.' is invalid.");</script>';
           exit();
     }else{
          return $Sql_Str;
     }
}

 

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-26
  • 2022-12-23
  • 2021-12-27
  • 2021-12-27
猜你喜欢
  • 2021-04-08
  • 2022-12-23
  • 2022-12-23
  • 2021-06-15
  • 2021-08-29
  • 2021-11-23
  • 2022-01-07
相关资源
相似解决方案