php防止sql语句注入常用方法:过滤法
<?
$id=$_GET["id"];
$query="SELECT * FROM my_table where id=‘".$id."‘"; //注入漏洞$result=mysql_query($query);
这里很明显我们可以用注入来获得数据库的其它内容了。
可以用下面的方法防止注入。
注入一样的,大家可以看看以前的黑防。然后我们看下面通过post方法获取变量的处理:
$text1=$_POST["text1"];
$text2=$_POST["text2"];
$text3=$_POST["text3"];
这些数据得到后要是直接写入数据库,肯定会存在很大的漏洞。
漏洞解决:
这个漏洞的解决方法其实很简单,就是严格对全部提交的变量进行过滤。对一些敏感的字符进行替换。我们可以借助PHP提供的htmlspecialchars()函数来替换HTML的内容。这里给出一段例子:
//构造过滤函数
function flt_tags($text)
{
$badwords=array("敏感词1","敏感词2"); //词汇过滤列表把那你认为敏感的字写在里面
$text=rtrim($text);
foreach($badwords as $badword) //这里进行词汇的过滤
{
if(stristr($text,$badword)==true){ die("错误:你提交的内容含有敏感字眼,请不要提交敏感内容。"); }
}
$text=htmlspecialchars($text); //HTML替换
//这两行把回车替换为
$text=str_replace(" "," ",$text);
$text=str_replace(" ","",$text);
$text=str_replace("&line;","│",$text); //文本数据库分隔符"&line;"替换为全角的"│"
$text=preg_replace("/s{ 2 }/"," ",$text); //空格替换
$text=preg_replace("/ /"," ",$text); //还是空格替换
if(get_magic_quotes_gpc()){ $text=stripslashes($text); } //如果magic_quotes开启,则进行‘的替换
return $text;
}
$text1=$_POST["text1"];
$text2=$_POST["text2"];
$text3=$_POST["text3"];
//过滤后的数据
//上面数据通过过滤后,就可以直接用啦,基本是安全的。
?>