我在我的Rails 3.0應用程序上使用Devise,並且我們目前已確認並可恢復打開。這些模塊要求用戶確認他們的電子郵件帳戶(可確認),並允許用戶通過發送電子郵件到他們的電子郵件帳戶(可恢復)重置他們的密碼。安全謎題:確認電子郵件和重置密碼
不幸的是,我們很難「設計」一種合理的安全策略,允許用戶在未確認其帳戶的情況下使用該站點。我們加強了安全以下要求:
確認您的賬戶需要簽字或簽字是這種情況並非如此,用戶A小心輸入惡意用戶B的錯誤的電子郵件地址,B會收到確認電子郵件鏈接,自動登錄,並從那裏通過「電子郵件重置密碼鏈接」重置密碼。要求B使用A的憑證登錄可以消除這種可能性。
通過電子郵件重置密碼需要確認電子郵件。這是因爲如果用戶A意外地輸入了錯誤的電子郵件地址,其中一個屬於惡意用戶B,那麼B將收到確認電子郵件鏈接並且知道A已經註冊了一個帳戶。因此B可以訪問該網站並使用重置密碼功能來更改帳戶上的密碼,並隨後可以確認其帳戶。要求確認的電子郵件地址消除了這種可能性。
所以一切都很好。除了當用戶A創建一個帳戶,並沒有確認他的帳戶,然後返回到該網站並忘記了他的密碼。這裏A被陷入循環依賴循環,重置密碼需要確認他的賬戶,但確認他的賬戶需要使用他忘記的密碼登錄。
兩個可能的解決方案:
要求用戶在登錄後立即確認他們的帳戶,這將創建更多的註冊摩擦,但消除了循環依賴。
允許用戶在沒有確認帳戶的情況下重置密碼,但不允許用戶在確認帳戶之前輸入敏感信息或執行重要操作。這樣一來,惡意用戶B的賬號劫持仍然是可能的,但是他無需任何有價值的信息或權力就可以控制賬號。
那裏有更好的解決方案嗎?公司如何處理這個問題?我已經使用了幾個不需要立即發送電子郵件確認的網站,所以如果我們能夠以不需要執行像#2這樣複雜的事情的方式來做到這一點,那將會很不錯。
謝謝!
嘿。對此有何後續?我正在瀏覽過去的答案,看到這還沒有被接受的答案。你最終做出了決定,還是仍在設計? – Gray