2010-10-21 59 views
0

我正在構建一個搜索頁面,並且我有些不確定我應該如何清理和驗證用戶輸入。驗證用戶輸入(搜索過濾器)

搜索頁面具有通過querystrings傳遞的過濾器。 (一些從輸入和其他鏈接複選框/收音機行爲通過)

在這種情況下我應該注意什麼?我可以安全使用preg_replace(全部除外)並逃脫嗎?

另外 - 我需要做任何事情(用戶輸入)在把它們放入鏈接之前?我應該添加另一個查詢來檢索可能的值,循環遍歷結果並排除那些未找到的用戶輸入? (防止鏈接附加用戶可能已經放入的虛假過濾器選項。雖然不會影響與更改的url的用戶?)

我不知道它是否重要,但一些過濾器傳遞querystrings是數組。

您認爲如何?我對此很陌生,我很感激幫助。謝謝!

回答

0

從你的問題中不清楚你試圖保護什麼,但是消毒輸入的常見問題是數據庫。

在這種情況下,最重要的是:使用參數化查詢。這可以立即解決大部分問題。這裏的a good answer.

逃避的數量比這更好。至於消毒查詢字符串本身,問問自己:如果攻擊者手動構建URL,可能會發生什麼壞事?或者他們只是得到一個錯誤頁面?

0

PHP自帶的函數專門用於清理MySQL查詢中使用的字符串。

如果您使用(老式)PHP函數mysql_query()向數據庫發出查詢,請查看PHP函數mysql_real_escape_string

$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", 
     mysql_real_escape_string($user), 
     mysql_real_escape_string($password));