Rumah >pembangunan bahagian belakang >tutorial php >php过滤特殊字符sql防注入代码

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

WBOY
WBOYasal
2016-07-25 08:54:031271semak imbas
  1. //方法一
  2. //过滤',",sql语名
  3. addslashes();
  4. //方法二,去除所有html标签
  5. strip_tags();
  6. //方法三过滤可能产生代码
  7. function php_sava($str)
  8. {
  9. $farr = array(
  10. "/s+/",
  11. "/]*?)>/isU",
  12. "/(]*)on[a-zA-Z]+s*=([^>]*>)/isU",
  13. );
  14. $tarr = array(
  15. " ",
  16. "<>", //如果要直接清除不安全的标签,这里可以留空
  17. "",
  18. );
  19. $str = preg_replace( $farr,$tarr,$str);
  20. return $str;
  21. }
  22. //php sql防注入代码
  23. class sqlin
  24. {
  25. //dowith_sql($value)
  26. function dowith_sql($str)
  27. {
  28. $str = str_replace("and","",$str);
  29. $str = str_replace("execute","",$str);
  30. $str = str_replace("update","",$str);
  31. $str = str_replace("count","",$str);
  32. $str = str_replace("chr","",$str);
  33. $str = str_replace("mid","",$str);
  34. $str = str_replace("master","",$str);
  35. $str = str_replace("truncate","",$str);
  36. $str = str_replace("char","",$str);
  37. $str = str_replace("declare","",$str);
  38. $str = str_replace("select","",$str);
  39. $str = str_replace("create","",$str);
  40. $str = str_replace("delete","",$str);
  41. $str = str_replace("insert","",$str);
  42. $str = str_replace("'","",$str);
  43. $str = str_replace(""","",$str);
  44. $str = str_replace(" ","",$str);
  45. $str = str_replace("or","",$str);
  46. $str = str_replace("=","",$str);
  47. $str = str_replace("%20","",$str);
  48. //echo $str;
  49. return $str;
  50. }
  51. //aticle()防SQL注入函数//php教程
  52. function sqlin()
  53. {
  54. foreach ($_GET as $key=>$value)
  55. {
  56. $_GET[$key]=$this->dowith_sql($value);
  57. }
  58. foreach ($_POST as $key=>$value)
  59. {
  60. $_POST[$key]=$this->dowith_sql($value);
  61. }
  62. }
  63. }
  64. $dbsql=new sqlin();
  65. ?>
复制代码

使用方式: 将以上代码复制新建一个sqlin.php的文件,然后包含在有GET或者POST数据接收的页面

原理分析: 将所有的SQL关键字替换为空 本代码在留言本中不能使用,若要在留言本中使用请替换其中的 ....... $str = str_replace("and","",$str); 到 $str = str_replace("%20","",$str); ... 的代码为:

  1. $str = str_replace("and","and",$str);
  2. $str = str_replace("execute","execute",$str);
  3. $str = str_replace("update","update",$str);
  4. $str = str_replace("count","count",$str);
  5. $str = str_replace("chr","chr",$str);
  6. $str = str_replace("mid","mid",$str);
  7. $str = str_replace("master","master",$str);
  8. $str = str_replace("truncate","truncate",$str);
  9. $str = str_replace("char","char",$str);
  10. $str = str_replace("declare","declare",$str);
  11. $str = str_replace("select","select",$str);
  12. $str = str_replace("create","create",$str);
  13. $str = str_replace("delete","delete",$str);
  14. $str = str_replace("insert","insert",$str);
  15. $str = str_replace("'","'",$str);
  16. $str = str_replace(""",""",$str);
  17. ?>
复制代码

------------------------------------------------------- addslashes -- 使用反斜线引用字符串

string addslashes ( string str )

返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)。

一个使用 addslashes() 的例子是当你要往数据库中输入数据时。例如,将名字 O'reilly 插入到数据库中,这就需要对其进行转义。大多数据库使用 \ 作为转义符:O\'reilly。这样可以将数据放入数据库中,而不会插入额外的 \。当 PHP 指令 magic_quotes_sybase 被设置成 on 时,意味着插入 ' 时将使用 ' 进行转义。

默认情况下,PHP 指令 magic_quotes_gpc 为 on,它主要是对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。 get_magic_quotes_gpc() 本函数取得 PHP 环境配置的变量 magic_quotes_gpc (GPC, Get/Post/Cookie) 值。返回 0 表示关闭本功能;返回 1 表示本功能打开。当 magic_quotes_gpc 打开时,所有的 ' (单引号), " (双引号), \ (反斜线) and 空字符会自动转为含有反斜线的溢出字符。 addslashes与stripslashes是php中对数据库的字符进行操作时. 乍一看好像很难记,但是只要分析一下,add是增加,strip是忽略.slash是斜线,slash就是斜线的复数.那么addslashes就是增加斜线的意思,因为有些特殊的字符写入数据库后会出现问题,比如" '等,所以要加\给特殊符号转义,告诉数据库那些特殊符号是字符串,同理stripslashes是从数据库取出字符串时就要减去斜线了. htmlspecialchars把某些特殊字符转换成html的编码,常用到的场合可能就是处理客户留言的留言版了。 这些特殊字符仅限于以下几个: & -> & “ -> " -> > htmlentities跟htmlspecialchars的功能类似,但是htmlentities是对所有HTML定义的entity都不放过,包括各种特殊字符和中文,这样得出来的结果是中文字符部分变为一堆乱码。 htmlspecialchars_decode是htmlspecialchars的逆向过程,把html的编码转换成字符。 php过滤特殊字符实用函数 php表单提交特殊字符过滤方法 html特殊字符过滤php类 url链接中特殊字符转义方法 php特殊字符转义详解 php过滤参数特殊字符防注入 php 过滤非法与特殊字符串的方法 php特殊字符处理函数的例子



Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn