我們知道addslashes()函數的作用是對輸入字串中的某些預定義字元前添加反斜線。那麼它怎麼又與我們的防sql注入扯上關係呢?什麼又是sql注入呢?
SQL注入攻擊是駭客攻擊網站最常用的手段。如果你的網站沒有使用嚴格的使用者輸入檢驗,那麼常容易遭到SQL注入攻擊。SQL注入攻擊通常通過給網站資料庫提交不良的資料或查詢語句
來實現,很可能使資料庫中的紀錄遭到暴露,更改或被刪除。本篇文章主要介紹php利用 addslashes函數實現sql防注入執行個體講解,通過執行個體講述採用addslashes函數對於sql防注入的用處。
樣本
參數'a..z'界定所有大小寫字母均被轉義,代碼如下:
echo addcslashes('foo[ ]','a..z'); //輸出:foo[ ] $str="is your name o'reilly?"; //定義字串,其中包括需要轉義的字元 echo addslashes($str); //輸出經過轉義的字串
定義和用法:
addslashes() 函數在指定的預定義字元前添加反斜線.
這些預定義字元是:單引號 ('),雙引號 ("),反斜線 (),null
文法:
addslashes(string)
當然這個函數更安全,執行個體代碼如下:
$str="<a href='test'>test</a>"; //定義包含特殊字元的字串 $new=htmlspecialchars($str,ent_quotes); //進行轉換操作 echo $new; //輸出轉換結果 //不過輸出時要用到 $str="jane & 'tarzan'"; //定義html字串 echo html_entity_decode($str); //輸出轉換後的內容 echo "<br/>"; echo html_entity_decode($str,ent_quotes); //有選擇性參數輸出的內容
本篇對於PHP安全程式設計來說具有不錯的參考借鑒價值。不過使用addslashes防止SQL注入駭客是有辦法繞過的,也不是那麼的安全。很多PHP程式員仍在依靠addslashes防止SQL注
入,還是建議大家加強中文防止SQL注入的檢查。addslashes的問題在 於駭客 可以用0xbf27來代替單引號,而addslashes只是將0xbf27修改為0xbf5c27,成為一個有效多位元組字元,
其中的0xbf5c仍會 被看作是單引號,所以addslashes無法成功攔截。當然addslashes也不是毫無用處,它是用於單位元組字串的處理