一般的于SQL注入防范的代码在用户输入了SQL关键字后会被拦或被踢出去. 下面这段代码同样可以过滤SQL,方法是把SQL关键字用中括号括起来,这样就成为一个不可执行的SQL语句。 使用法了很简单:把PHP内容保存到一个GetPost.php文件中去,然后将该文件包含到需要的页面里即可:<? include("GetPost.php"); ?>
以下给出了这段代码的内容:
<?php
function dowith_sql($str) { $refuse_str="and|or|select|update|from|where|order|by|*|delete|'|insert|into|values|create|table|database"; $arr=explode("|",$refuse_str); for($i=0;$i<count($arr);$i++) { $replace="[".$arr[$i]."]"; $str=str_replace($arr[$i],$replace,$str); } return $str; } foreach ($_GET as $key=>$value) { $_GET[$key]=dowith_sql($value);
} foreach ($_POST as $key=>$value) { $_POST[$key]=dowith_sql($value);
} ?>
我测试了一下,在两个foreach(){ } 数据块体中分别加了echo $_GET[$key]; 和 echo $_POST[$key];输入以下网址:http://localhost/sxsy/www/inc/GetPost.php?id=select&value=insert&c='&aa=into&bb=d
得到如下结果:
[select][insert]['][into]d
我又写了一个去除中括号的函数:
<? function show_sql_keyword($str) { $refuse_str="and|or|select|update|from|where|order|by|*|delete|'|insert|into|values|create|table|database"; $arr=explode("|",$refuse_str); for($i=0;$i<count($arr);$i++) { $replace="[".$arr[$i]."]"; $str=str_replace($replace,$arr[$i],$str); } return $str; }
|