[英]Protect from SQL injection
我正在嘗試學習php並希望使用一個函數來保護表單再次SQL注入! 但不知何故形成記錄我的數據庫每個包含任何特殊字符的數據,如'“=)/()/ * /
我的過濾功能:
function filter($data) {
$data = trim(htmlentities(strip_tags($data)));
if (get_magic_quotes_gpc())
$data = stripslashes($data);
$data = mysql_real_escape_string($data);
return $data;
}
注冊頁面以獲取POST數據:
foreach($_POST as $key => $value) {
$data[$key] = filter($value);
}
然后我嘗試特殊字符和形式保存! 我做錯了什么?
嗯...防止SQL注入的目的是繼續允許用戶鍵入他們喜歡的內容,而不會讓服務器或其他用戶面臨風險。 htmlspecialchars
是一個很好的起點,因為它看起來像HTML標簽並使它們變得無用。 你使用的stripslashes
是好的,雖然最新版本的PHP刪除了魔術引號。 mysql_real_escape_string
允許您以合理的安全性以字符串的形式在數據庫中插入任何內容。
所以你的過濾器功能應如下所示:
function filter($data) {
if( get_magic_quotes_gpc()) $data = stripslashes($data);
return trim(mysql_real_escape_string(htmlspecialchars($data));
}
現在,如果你真的想要一個過濾器 ,就像只允許某些字符一樣的過濾器 ,請使用preg_match
等正則表達式函數。
不推薦使用mysql_ *函數,因為它們已被棄用。 使用PHP數據庫對象(PDO),因為PDO允許參數綁定,以保護您免受SQL注入。
您可以在此處閱讀使用PDO
如果不使用框架,還要考慮檢查正則表達式。 示例: http : //www.symantec.com/connect/articles/detection-sql-injection-and-cross-site-scripting-attacks
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.