2011-08-19 94 views
2

我想實現重置密碼功能,以防用戶丟失密碼。但是我擔心有人能夠爲單個或多個不屬於他的電子郵件地址提出大量請求,這對於這些地址的實際所有者來說會很煩人,而且我最終會被列入黑名單。如何保護重置密碼功能?

我該怎麼做才能確保這個功能的安全?設置每個IP發送的有效電子郵件的限制? (3封電子郵件,最多將被罰款我猜)

回答

4

爲什麼不簡單地將密碼驗證碼添加到密碼重置請求表單中?然後,您可以限制每個電子郵件地址和每天/每週/每月的請求數量,但驗證碼會讓機器人遠離。

+0

哦,我忘記了驗證碼,有一段時間沒有使用它們(大多數機器人甚至不發送餅乾,所以我的csrf保護足以讓它們遠離)。謝謝 – HappyDeveloper

0

要小心通過IP設置限制。您經常會有一個互聯網網關,通過一個IP(即公司網絡)暴露大量用戶。

如果你擔心做重置特定地址的請求的數量,這是比安全問題更可用性問題。我傾向於定義一個可接受的費率,這個餘額不允許太多的重置請求,而不會使得難以執行重置(即,原始電子郵件被垃圾抓住,所以另一個被請求)。例如,記錄請求的時間,並且不允許另一個15分鐘。

務實不過,我不會太擔心這個。如果你真的想要這樣做,有很多方法可以通過電子郵件與某人聯繫在一起,除非利用你的重置功能有什麼特別的吸引力,我只是做大多數網站的工作,並允許在需要時進行重置,並且只在實際重置密碼後用戶收到電子郵件並執行操作。

+0

是的,這就是爲什麼我發送電子郵件:確認重置。你說我必須記錄時間,不允許15分鐘。爲了誰?對於IP?對於那個會話cookie?那封電子郵件?是的,我知道還有其他威脅。但我一次只能確保一件事。 – HappyDeveloper

+0

如果您擔心電子郵件的重置請求過多,請根據該電子郵件限制請求。 –

+0

我的問題是被郵件服務器列入黑名單。 – HappyDeveloper

2

假設你正在編寫意在互聯網,在那裏你無法控制用戶的註冊所使用的應用程序,你可以在嘗試在用戶帳戶密碼重置嘗試次數設置滾動限制。

滾動限制將用於確保過多的密碼重置請求不是一個短期時間內發送出去。您可以限制用戶發出3次密碼重置請求,但只能在1小時內或甚至1天內;您的企業應該能夠確定最佳價值,特別是如果用戶還可以通過其他方式(通過發送電子郵件或致電服務檯)發出密碼重置請求。

此外,可以將生成的令牌(我假設你與每個郵件發送出去密碼重置令牌)與預定的截止日期相關聯,並且所有這些標記可能只能使用一次。理想情況下,令牌不應超過幾個小時。除了通常的認證嘗試之外,高度敏感的應用程序還會審覈所有密碼重置請求。

最後,你還可以建立從某個IP發起密碼重置請求的數量限制(這是一個DOS攻擊的預防,不會對DDoS攻擊的工作)。不用說,但如果嘗試重置密碼,則不應在此期間禁用關聯的帳戶。這樣做可以實現成功的DoS攻擊,攻擊者可以通過簡單地針對已知電子郵件ID數據庫發出密碼重置請求來禁用帳戶。在確定限制時,您將不得不考慮ISP代理,否則實際上可能會傷害少數客戶。

1

我已經看到其他網站屬性引入了一個新的密碼重置系統(比CAPTCHA好得多),它提供了某種形式的2FA(雙因素身份驗證),您可以在其中登錄到您的帳戶,作爲備份。用戶獲得發送到其單元的一次性PIN碼,並將其輸入。沒有垃圾郵件過濾器處理,驗證碼錶單重新加載,等等...更容易。防止批量註冊,垃圾郵件,並且通常看起來比替代解決方案更加有效和用戶友好。