首頁  >  文章  >  後端開發  >  php防止sql注入的函數介紹

php防止sql注入的函數介紹

高洛峰
高洛峰原創
2016-11-29 15:25:181745瀏覽

前幾天網站給人注入​​了,現在我給大家來介紹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_gpc  

    function 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不考慮連接的當前字元集。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn