在查詢數據庫時需要防止sql注入
實現的方法:
PHP自帶了方法可以將sql語句轉義,在數據庫查詢語句等的需要在某些字符前加上了反斜線。這些字符是單引號(')、雙引號(")、反斜線(\)與 NUL(NULL
字符)。
string addslashes ( string $str
)
該函數返回一個字符串
范例
Example #1 一個 addslashes() 例子
<?php
$str = "Is your name O'reilly?";
// 輸出: Is your name O\'reilly?
echo addslashes($str);
?>
ThinkPHP自動給提供了安全防護,對於字符串類型的數據,ThinkPHP都會進行escape_string處理(real_escape_string,mysql_escape_string)
要有效的防止SQL注入問題,官方建議:
- 查詢條件盡量使用數組方式,這是更為安全的方式;
- 如果不得已必須使用字符串查詢條件,使用預處理機制;
- 使用自動驗證和自動完成機制進行針對應用的自定義過濾;
- 如果環境允許,盡量使用PDO方式,並使用參數綁定。
查詢條件預處理
這種方式類似於在查詢語句中放入一個占位符,然后通過數組的形式傳入參數
例如:
$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();