2

我沒有找到任何有關身份驗證步驟(至少是步驟順序)的好引用。身份驗證流程步驟順序和驗證碼功能

更具體我感興趣的應該是什麼樣的步驟順序:

  1. 用戶名驗證(用戶名是否被找到);
  2. 密碼驗證;
  3. 憑證已過期或未過期。
  4. Credentails臨時或不臨時
  5. 驗證碼驗證。

據我所知,在特定情況下,這些步驟的順序並不那麼重要,但通常最好了解這些建議。即使爲了爲系統創建適當的用例。

作爲例如,它可以設計不同的方式:

  1. 系統只能提供一般的信息,即用戶名或密碼不正確。在不正確的驗證碼信息的情況下將是相同的。

  2. 系統可以提供更多不同的消息。由於示例不正確的驗證碼將提供類似於「輸入錯誤驗證碼」的消息; 不正確的用戶名或密碼信息將是「用戶名或密碼不正確」。 (我不確定表單安全性的角度是否可以)

而問題是什麼用例更好? (提供一些證據證明這在適當的參數下更好)。

回答

0

這取決於很多原因。不過,我會做這樣的:

客戶方

  1. 如果你想,檢查總體要求e.g用戶名和密碼的長度,並提示用戶,這可以通過javascript來完成。

不要忘記這段代碼是公開的,這意味着黑客會看到這個需求,並在預先形成攻擊的同時考慮這些需求。

Serverside集團

  1. 驗證碼驗證。首先這樣做是因爲如果這樣做失敗,則不需要使用數據庫進行查找(可能您在此處使用某種第三方服務)

  2. 用戶名和密碼檢查,因爲這將是第二最常見失敗。

  3. 憑證已過期或未過期,並且Credentails是臨時或非暫時的,任何訂單。


好消息:

2和3也,可能(取決於你的架構),可以在一個單一的數據庫查詢完成。如果您使用SQL數據庫,請不要忘記使用prepared statements

你也可以做很多的服務器端來檢測攻擊企圖和限制權限,如果有什麼可疑的。例如,在X登錄嘗試失敗後臨時禁止用戶帳戶。存儲IP地址並將它們匹配到位置。例如,美國用戶在10分鐘後從中國登錄是可疑行爲(Facebook和其他人這樣做)。

確保您確切地知道您在執行客戶端和服務器端以及執行順序。一個好主意可以是繪製信息流圖。並使用攔截代理來查看發送的內容。密碼是否發送清楚?(使用ssl並將它們散列到客戶端,而不是說您不要再次散列它們(和salt),以便該方法可以儘可能保密)

+0

是否有效方案(從安全角度)顯示消息captcha錯誤(或有一些建議只顯示一條消息)?因爲在證書過期的情況下,建議不要顯示證書過期的消息。 – user1459144

+0

我不會顯示客戶端觸發了關於錯誤驗證碼的警告,智能機器人可以輕鬆適應這一點。讓請求被髮送到服務器,以便它可以被記錄。此外,如果您檢查captcha客戶端,則代碼對任何惡意用戶都是完全可見的。它可能會被混淆,但它仍然在那裏爲他們進行逆向工程。 –

+0

還有一個關於偏好的問題:)。如果在對特定用戶的10次失敗嘗試後應該顯示驗證碼,您是否會更改提議的步驟順序?因爲在這種情況下,您還需要執行數據庫查找(並且此操作將比憑據檢查更昂貴)? – user1459144