對于WEB應用來說,SQL注入攻擊無疑是首要防范的安全問題,系統底層對于數據安全方面本身進行了很多的處理和相應的防范機制,例如:
$User?=?M("User");?//?實例化User對象 $User->find($_GET["id"]);
即便用戶輸入了一些惡意的id參數,系統也會強制轉換成整型,避免惡意注入。這是因為,系統會對數據進行強制的數據類型檢測,并且對數據來源進行數據格式轉換。而且,對于字符串類型的數據,Thinkphp都會進行escape_string處理(real_escape_string,mysql_escape_string),還支持參數綁定。
通常的安全隱患在于你的查詢條件使用了字符串參數,然后其中一些變量又依賴由客戶端的用戶輸入。
要有效的防止SQL注入問題,我們建議:
立即學習“PHP免費學習筆記(深入)”;
● 查詢條件盡量使用數組方式,這是更為安全的方式;
●?如果不得已必須使用字符串查詢條件,使用預處理機制;
●?使用自動驗證和自動完成機制進行針對應用的自定義過濾;
●?如果環境允許,盡量使用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/
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦