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"];
過濾後的資料
上面資料通過過濾後,就可以直接用啦,基本是安全的。
?>