2014-03-01 104 views
3

當有人在網站上用他們的電子郵件地址註冊時,他們通常會被要求通過點擊他們發送到的電子郵件地址中的鏈接來驗證或確認他們的電子郵件。訂閱或取消訂閱郵件列表也一樣。電子郵件驗證/確認安全

可用性明智,這是偉大的。這是非常快速和容易的事情,我想不出任何會打敗它的東西。

我不確定自己是否在推翻事物,但我只是想看看我是否遺漏了任何東西或者誤判了任何事情。

所以據我所知電子郵件驗證的目的 /確認是

  • 爲了確保電子郵件地址是正確的
  • 要發送到該地址確保電子郵件可閱讀並接受
  • 爲了確保電子郵件地址確實屬於誰的嘗試註冊

隨着CURR的人只需一個他們點擊鏈接的流行實現,並立即驗證電子郵件,有人可能只是強制驗證鏈接並繞過這整個步驟。

只是訪問verify.php?code=YOURBESTGUESSHERE並嘗試各種不同的代碼。

攻擊者現在可以進行以下剝削

  • 從我的郵件列表退訂一堆人
  • 一堆人加入到我的郵件列表中沒有他們的同意傷了我的生意,因爲他們可能對我的內容不感興趣,他們可能會認爲我是垃圾郵件並且生意不好
  • 有人可以通過檢查驗證頁面上的響應來尋址地址(例如,如果響應是「[email protected]」已經驗證「左右)
  • 有人可以製造假賬戶,而不需要具有實際工作電子郵件地址

我不知道後者的好處是什麼,似乎這將是更容易,只需創建一個罰球爲了這個目的,我只是想把它放在那裏完成。

我的問題:

  • 我錯過任何其他目的或剝削電子郵件驗證/確認的?
  • 我是否應該爲電子郵件驗證添加安全層,例如驗證碼或時間延遲以防止暴力破解?
  • 我應該問除復位代碼以外的其他信息嗎?像用戶名或電子郵件地址了嗎?或者安全問題類型的東西,或者他們在註冊時輸入的另一條信息?

這整件事情的最佳實踐是什麼,需要付出多大的擔心和努力?風險與收益/安全與可用性...?

+2

也許你應該問這是關於http://security.stackexchange.com的具體問題? – SilverlightFox

回答

5

如果攻擊者的YOURBESTGUESSHERE的搜索空間足夠大,暴力就變得不可行。使用源自電子郵件地址的代碼加上通過已知良好的單向散列函數實現的時間戳。

確保代碼在使用後很短時間內(可能需要幾天)。

當代碼呈現時,不要泄漏信息 - 代碼的真實用戶知道它應用於哪個電子郵件地址,並且沒有其他人需要。

+0

給代碼過期有什麼好處嗎?我明白爲什麼這是重置密碼所必需的,但對於電子郵件確認,我想不出一個沒有到期的代碼會成爲問題的情況。 –

+0

@JoshNoe,即將到期的幻數允許您從數據庫中清除它們,避免了DoS的另一個潛在途徑。 – mlp

2

如果需要,您可以隨時增加安全性。考慮將鏈接與唯一代碼結合起來。所以當暴力破解允許找到一個鏈接時,他們仍然需要從電子郵件中輸入一個隨機代碼。

像嘗試次數這樣的建議將是我會首先執行的一項建議,以避免系統問題(請求數)而不是安全性。