thinkphp如何防止sql注入?
對WEB應用來說,SQL注入攻擊無疑是首要防範的安全性問題,系統底層對於資料安全性方面本身進行了許多的處理和對應的防範機制,例如:
$User = M("User"); // 实例化User对象 $User->find($_GET["id"]);
即便使用者輸入了一些惡意的id參數,系統也會強制轉換成整數型,避免惡意注入。這是因為,系統會對資料進行強制的資料類型檢測,並且對資料來源進行資料格式轉換。而且,對於字串類型的數據,ThinkPHP都會進行escape_string處理(real_escape_string,mysql_escape_string),也支援參數綁定。
通常的安全隱患在於你的查詢條件使用了字串參數,然後其中一些變數又依賴由客戶端的使用者輸入。
要有效的防止SQL注入問題,我們建議:
● 查詢條件盡量使用陣列方式,這是更安全的方式;
● 如果不得已必須使用字串查詢條件,使用預處理機制;
● 使用自動驗證和自動完成機制進行針對應用的自訂過濾;
● 如果環境允許,盡量使用PDO方式,並使用參數綁定。
查詢條件預處理
where方法使用字串條件的時候,支援預處理(安全過濾),並支援兩種方式傳入預處理參數,例如:
$Model->where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))->select(); // 或者 $Model->where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)->select();
模型的query和execute方法同樣支援預處理機制,例如:
$model->query('select * from user where id=%d and status=%d',$id,$status); //或者 $model->query('select * from user where id=%d and status=%d',array($id,$status));
execute方法用法同query方法。
本文來自ThinkPHP框架技術文章欄:http://www.php.cn/phpkj/thinkphp/
#以上是thinkphp如何防止sql注入的詳細內容。更多資訊請關注PHP中文網其他相關文章!