Dòng chảy bình thường để đặt lại mật khẩu của người dùng qua đường bưu điện là:Password reset bằng email mà không một bảng cơ sở dữ liệu
- Tạo một chuỗi ngẫu nhiên và lưu trữ nó trong một bảng cơ sở dữ liệu
- chuỗi Email để sử dụng
- Nhấp chuột vào liên kết có chứa chuỗi
- Chuỗi được xác thực đối với cơ sở dữ liệu; nếu nó khớp với, pw của người dùng được đặt lại
Tuy nhiên, việc duy trì bảng và hết hạn chuỗi cũ vv có vẻ như một chút rắc rối không cần thiết. Có bất kỳ sai sót rõ ràng trong phương pháp thay thế này?
- Tạo một hash MD5 của mật khẩu hiện tại của người dùng
- chuỗi Email băm để sử dụng
- Người dùng nhấp vào liên kết chứa chuỗi
- Chuỗi được xác nhận bằng cách băm pw hiện một lần nữa; nếu nó khớp, pw của người dùng được đặt lại
Lưu ý rằng mật khẩu của người dùng đã được lưu trữ dưới dạng băm và muối, và tôi chỉ băm một lần nữa để nhận chuỗi duy nhất nhưng có thể lặp lại.
Và có, có một "lỗ hổng" rõ ràng: liên kết đặt lại do đó được tạo sẽ không hết hạn cho đến khi người dùng thay đổi mật khẩu của họ (nhấp vào liên kết). Tôi không thực sự thấy lý do tại sao điều này sẽ là một vấn đề mặc dù - nếu hộp thư bị xâm nhập, người sử dụng là hơi say anyway. Và không có nguy cơ tái sử dụng, vì khi mật khẩu của người dùng bị thay đổi, liên kết đặt lại sẽ không còn khớp nữa.
+1 cho ý tưởng thú vị –