前幾天網站給人注入了,現在我給大家來介紹php防止sql注入的幾個自帶的處理函數,例如PHP的MySQL操作函數中有addslashes()、mysql_real_escape_string()、mysql_escape_string()等函數
具體用法:addslashes防止SQL注入
雖然國內很多PHP程式設計師仍在依靠addslashes防止SQL注入,還是建議大家加強中文防止SQL注入的檢查。 addslashes的問題在於駭客可以用0xbf27來代替單引號,而addslashes只是將0xbf27修改為0xbf5c27,成為一個有效的多字節字元,其中的0xbf5c仍會被看作是單引號,所以addslashes無法成功攔截.
bf5c仍會被看作是單引號,所以addslashes無法成功攔截.bf5c仍會被看作是單引號,所以addslashes無法成功攔截.
bf5c仍會被看作是單引號,所以addslashes無法成功攔截.bf5c
當然addslashes也不是毫無用處,它是用於單字節字串的處理,多字節字元還是用mysql_real_escape_string吧.另外對於php手冊中get_magic_quotes_gpcfunction post_check($post)
{
{ $post = addslashes($post); // $post = addslashes($post); // 進行magic_quotes =資料的過濾 } $post = str_replace($post = str_replace("%", "%", $post ); // 把' % '過濾掉
$post = nl2br($post); // 回車轉換 轉換
return $post;
}//開源程式碼phpfensi.com
?>
//或
{
return eregi('select|insert|update|delete| return eregi('select|insert|update|delete| return eregi('select|insert|update|delete| return eregi('select|insert|update|delete》| return eregi('select|insert|update|delete|
function verify_id($id=null) { 判斷 elseif (inject_check($id)) { exit ('提交的參數非法! '); } // 注射判斷 elseif (!is_numeric($id)) { exit('提交的參數val($id); // 整型化 return $id; _escape_string ( string $unescaped_string [,resource $link_identifier ] )本函數將unescaped_string 中的特殊字元轉義,併計及連接的當前字符集,因此可以安全用於mysql_query().Note:mysql_real_escape_string() 不轉義% 和_.mysql_real_escape_string,Example#1 mysql_real_escape_string() 範例, = "Zak's and Derick's Laptop" ; $escaped_item = mysql_real_escape_string ( scaped_item ); ?> //以上例子將產生如下輸出: //Escaped string: Zak's and Derick's Laptop mysql_escape_string本函數將注:mysql_escape_string() 不轉義 % 和 _,本函數和 mysql_real_escape_string() 完全一樣,除了 mysql_real_escape_string() 接受的是一個連接句柄並根據當前字元集轉移字串之外。 mysql_escape_string() 不接受連接參數,也不管目前字元集設定.
範例1. mysql_escape_string() 範例,程式碼如下:
$item =dopp mysql_escape_string($item);
printf ("Escaped string: %sn", $escaped_item);
?
mysql_real_escape_string和mysql_escape_string這2個函數的差異:
mysql_real_escape_string 必須在(PHP 4 >= 4.3.0, PHP 5)的情況下才能使用,否則只能用mysql_escape_string,兩者的差異是:mysql_real_escape_string 考慮到連接的當前字元集考慮.
我們可以利用判斷來綜合處理,程式碼如下:
function cleanuserinput($dirty){
if (get_magic_quotes_gpc()) {Š
); ); } else{ $clean = mysql_real_escape_string($dirty); } 我_escape_string() 會判斷字元集,但是對PHP版本有要求;* mysql_escape_string不考慮連接的當前字元集。