Cách an toàn nhất để xử lý mật khẩu đã quên/đặt lại mật khẩu là gì? Tôi có nên gửi mật khẩu qua email cho người dùng không? Nếu vậy thì bạn buộc họ phải thiết lập lại nó? Hoặc bạn có cho phép họ đặt lại ngay lập tức (không gửi email) và yêu cầu một số thông tin khác để xác minh rằng đó là họ không? Hoặc là có một phương pháp tốt hơn?Cách an toàn để đặt lại mật khẩu hoặc cung cấp mật khẩu cũ
Trả lời
Bạn không thể gửi mật khẩu qua email cho người dùng vì bạn không biết mật khẩu. Bạn đã "băm" nó bằng applying something like PBKDF2 or bcrypt để lưu trữ, đúng không?
Nếu bạn đặt lại mật khẩu mà không xác nhận mật khẩu với chủ sở hữu tài khoản, kẻ tấn công có thể từ chối quyền truy cập vào tài khoản của anh ấy, ít nhất là cho đến khi anh ấy kiểm tra email của mình bằng cách sử dụng địa chỉ email của nạn nhân để yêu cầu đặt lại.
Một phương pháp đủ an toàn cho nhiều ứng dụng là gửi email liên kết tới chủ sở hữu tài khoản, chứa số lượng lớn, được tạo ngẫu nhiên. Mã thông báo này chỉ nên hợp lệ trong một khoảng thời gian giới hạn. Nếu chủ sở hữu muốn đặt lại mật khẩu của họ, họ nhấp vào liên kết và điều này xác thực họ là chủ sở hữu tài khoản. Sau đó, chủ sở hữu tài khoản có thể chỉ định mật khẩu mới.
Tôi cho rằng bạn sẽ làm điều đó theo chương trình? Hay nó là một câu hỏi cho Server Fault?
Một trong những cách là gửi liên kết đến tài khoản email của người dùng. Anh/cô ấy nhấp vào liên kết và được chuyển hướng đến biểu mẫu web bảo mật của bạn nơi họ đặt lại mật khẩu.
KHÔNG gửi email mật khẩu cho người dùng
Bạn không nên gửi mật khẩu qua email. Dưới đây là quy trình từng bước tôi đã sử dụng:
- Cung cấp cho người dùng tùy chọn đặt lại mật khẩu.
- Tùy chọn này lưu mã thông báo duy nhất cho người dùng. Thẻ cuối cùng hết hạn (giờ, ngày hoặc ngày).
- Một liên kết được gửi qua email đến người dùng bao gồm mã thông báo.
- Người dùng nhấp vào liên kết được gửi qua email.
- Nếu mã thông báo tồn tại và không hết hạn, liên kết sẽ tải biểu mẫu mật khẩu mới. Nếu không, không tải biểu mẫu mật khẩu mới.
- Khi người dùng đặt mật khẩu mới, hãy xóa mã thông báo và gửi cho người dùng email xác nhận.
Cho đến khi mật khẩu mới được đặt, mật khẩu cũ sẽ vẫn hoạt động. Đừng quên băm và muối mật khẩu!
- 1. Tạo mã bí mật để đặt lại mật khẩu
- 2. Cách khôi phục hoặc đặt lại mật khẩu gói SSIS?
- 3. Xác minh mật khẩu Django trong Ruby on Rails cung cấp mật khẩu không khớp
- 4. Đặt lại mật khẩu ASP.NET - vấn đề bảo mật?
- 5. Đặt lại mật khẩu bằng cách gửi email mật khẩu tạm thời
- 6. Mã hóa "mật khẩu" python an toàn nhất
- 7. Cách lưu trữ mật khẩu trong angularjs an toàn
- 8. Cách tạo mật khẩu ngẫu nhiên hoặc URL tạm thời để đặt lại mật khẩu trong Zend Framework?
- 9. Tôi quên mật khẩu chính Glassfish3, làm cách nào tôi có thể đặt lại mật khẩu?
- 10. Devise - Recoverable (Đặt lại mật khẩu)
- 11. Apache htpasswd thay đổi mật khẩu an toàn
- 12. psql fe_sendauth không có mật khẩu được cung cấp
- 13. Lưu trữ mật khẩu an toàn trong mã chương trình?
- 14. Đặt lại mật khẩu gốc của MySQL khi mật khẩu hiện tại không được biết
- 15. Xóa mật khẩu an toàn trong bộ nhớ (Python)
- 16. mật khẩu được gửi qua bài đăng an toàn?
- 17. fe_sendauth: không có mật khẩu được cung cấp
- 18. HTML/CSS: Cách nhập "mật khẩu" hiển thị mật khẩu?
- 19. Cách đặt mật khẩu vào mã
- 20. Làm cách nào để xóa hoàn toàn mật khẩu gốc
- 21. Biểu mẫu Django + để đặt lại mật khẩu
- 22. Tạo mẫu thư để đặt lại mật khẩu
- 23. Magento: Liên kết đặt lại mật khẩu không hoạt động
- 24. Làm cách nào để đặt lại hoặc thay đổi mật khẩu bằng SimpleMembership trong MVC4?
- 25. Hướng dẫn cho một bộ đếm mật khẩu mật khẩu (Trình kiểm tra mật khẩu) Thiết kế
- 26. Làm cách nào để thay đổi mật khẩu gốc thành mật khẩu trống?
- 27. Chủ đề email đặt lại mật khẩu Django
- 28. Khôi phục mật khẩu bằng mật khẩu sha1 băm
- 29. pgAdmin mang lại cho tôi những lỗi: không có mật khẩu được cung cấp
- 30. mật khẩu redacting logger
Đã có một cuộc thảo luận lớn về chủ đề này chỉ mới đây: http://stackoverflow.com/questions/2283937/how-should-i-ethically-approach-user-password-storage-for-later-plaintext-retriev –
Nếu hệ thống của bạn có khả năng tra cứu mật khẩu của người dùng và gửi email cho người đó, bạn đã làm điều gì đó rất sai. Bạn sẽ không bao giờ có thể tra cứu mật khẩu của người dùng. Bạn chỉ có thể băm một mật khẩu đến và so sánh, hoặc thay đổi nó và gửi mật khẩu mới. – Scott