2013-04-15 34 views
5

Theo như tôi có thể nghĩ, có hai cách hợp lý để đặt lại mật khẩu đã quên của người dùng.Thực hành tốt nhất để đặt lại mật khẩu người dùng bị lãng quên

  1. Để người dùng nhập địa chỉ email và mật khẩu văn bản thuần mới được gửi đến địa chỉ email của họ.

  2. Liên kết được gửi đến địa chỉ email của họ có số UID trong URL. Nhấp vào điều này sẽ đưa người dùng đến một biểu mẫu trên trang web nơi họ có thể chọn có mật khẩu mới.

Phương pháp nào là thích hợp hơn và tại sao?

Nếu phương pháp 1 được sử dụng, có lẽ bên thứ ba có thể đọc email và lấy mật khẩu mới. Nếu phương pháp 2 được sử dụng, những gì là để ngăn chặn một ai đó có phương pháp đi qua mã UID để thử và truy cập biểu mẫu để thay đổi mật khẩu của người dùng?

+0

Và cách chúng tôi xử lý liên kết đó nếu chúng tôi thực hiện theo cách thứ hai. Tôi đang gọi quên mật khẩu từ ứng dụng iOS và sử dụng API FRAPI (www.getfrapi.com). Khi người dùng nhấp vào liên kết thư đó thì chúng tôi xử lý url của thư đó như thế nào? thông qua API hoặc chúng ta cần máy chủ bên ngoài? Tôi cần giúp đỡ. – Ponting

+0

Có thể trùng lặp với [Quên mật khẩu: phương pháp tốt nhất để thực hiện chức năng quên mật khẩu là gì?] (Https://stackoverflow.com/questions/522967/forgot-password-what-is-the-best-method-of- thực hiện-một-quên-mật khẩu-funct) – OhadR

Trả lời

23

Các mô hình tốt nhất sẽ là:

  1. dùng yêu cầu thiết lập lại mật khẩu. Tốt nhất là để làm điều đó thông qua tên truy cập, và không cho biết nếu tên người dùng tồn tại hay không (để tránh khả năng người dùng niêm yết thông qua một kịch bản)

  2. Bạn tạo ra một kỷ lục trong một bảng cơ sở dữ liệu mới với userid, datetime đề nghị (= datetime hiện hành), và một GUID bạn vừa tạo

  3. bạn gửi thư cho người sử dụng, trỏ đến trang thiết lập lại mật khẩu với GUID (không phải là userid) như tham số

  4. On này , bạn nên kiểm tra xem GUID có tồn tại không và cuối cùng bạn có thể đặt một số ngày hết hạn (= người dùng có 1 ngày để thiết lập lại, ví dụ)

  5. Đừng quên để đánh dấu kỷ lục là "sử dụng" (với trường bổ sung trong bảng) khi người sử dụng thiết lập lại mật khẩu của mình, do đó bạn có thể ngăn chặn một cuối cùng thứ hai thử ...

Nó có thể thậm chí có thể an toàn hơn, nhưng đó là đã khá tốt tôi nghĩ ....

+0

Và cách chúng tôi xử lý liên kết đó nếu chúng tôi đang đi với 2 cách. Tôi đang gọi quên mật khẩu từ ứng dụng iOS và sử dụng API FRAPI (www.getfrapi.com). Khi người dùng nhấp vào liên kết thư đó thì chúng tôi xử lý url của thư đó như thế nào? thông qua API hoặc chúng ta cần máy chủ bên ngoài? Tôi cần giúp đỡ. – Ponting

+0

Chỉ cần đặt câu hỏi của riêng bạn, không rõ bạn đang làm gì ... –

+0

Nhưng bạn phải nhận ra rằng email phải luôn là cách thứ hai trong giao tiếp, vì người dùng có thể không truy cập được nữa email hoặc email sẽ không hợp lệ. Tôi khuyên bạn nên đọc [this] (http://www.fishnetsecurity.com/6labs/resource-library/white-paper/best-practices-secure-forgot-password-feature) và có được sự kết hợp tốt về các cách để đảm bảo quy trình đặt lại mật khẩu. –

7

OWASP có danh sách kiểm tra tốt của https://www.owasp.org/index.php/Forgot_Password_Cheat_Sheet

Dưới đây là một bản tóm tắt nhanh chóng bước sau:

  1. Gather nhận dạng dữ liệu hoặc an ninh Câu hỏi
  2. Xác nhận câu hỏi bảo mật
  3. Gửi một Token Hơn một Side-Channel
  4. Cho phép người dùng thay đổi mật khẩu
0

Xác minh xem người gửi có phải là người dùng thực hay không bằng cách đặt câu hỏi xác minh.

Không gửi mật khẩu trên email cá nhân không có trong danh sách nhân viên kế hoạch.

Không thêm từ "mật khẩu" vào tiêu đề hoặc nội dung của email.

Đảm bảo gửi riêng tên người dùng và mật khẩu.

Đối với Office 365 sử dụng, dẫn họ tới khu vực quên mật khẩu của tôi hoặc gửi liên kết này https://passwordreset.microsoftonline.com

Đừng đe dọa bởi người sử dụng, leo thang đến CNTT quản lý nếu có nhu cầu.

Các vấn đề liên quan