2012-10-11 50 views
3

我一直在尋找最有效的清理用戶輸入的方法。我的應用程序是一個簡單的發佈請求,用於驗證用戶。在網上尋找,我可以找到更多的十幾種不同的「最好」的做法。很多這些方法使用不推薦使用的php函數或者看起來過於複雜。爲了連接到我的sql數據庫,我使用了PDO類。PHP PDO清潔用戶輸入

在尋找我自己的功能,我迷迷糊糊翻過這一點:

與綁定參數預處理語句不僅更加輕便,更加方便,不受SQL注入,但往往要快得多比插值查詢執行,因爲服務器和客戶端都可以緩存查詢的編譯形式。

我已經使用的準備方法創建我的發言。這是否意味着我可以安全地防範SQL注入攻擊?還有什麼我應該擔心的?

回答

2

如果綁定通過與PDO預處理語句的所有用戶數據,你應該從注射安全。你放入你的SQL語句的任何變量(如排序順序),你都不綁定,是一個開放的攻擊向量。

1

@Ray已經回答了這個問題的第一部分。 對於第二部分,由於您對用戶進行了身份驗證,因此您應該擔心如何存儲他們的密碼,並使用某種單向加密哈希來加密鹽。然後檢查用戶輸入的密碼中是否使用原始salt匹配數據庫條目再次計算散列值。如果可能,請使用https進行身份驗證步驟。

+0

謝謝xception。目前我正在使用不均勻的鹽漬散列。在計算散列之後,我將鹽添加到它並將其存儲在數據庫中。當用戶進行身份驗證時,我從數據庫中獲取salt並將其與提供的密碼結合使用,以計算身份驗證哈希。爲了防止暴力攻擊,我也放慢了哈希函數。 –

+1

您可以在一段時間內限制失敗的身份驗證嘗試,而半小時內失敗的身份驗證嘗試有10次對任何人都是足夠的,並且會嚴重阻礙任何暴力破解嘗試。 Spor la treaba :) – xception