Tôi đã đọc rất nhiều ở đây và các địa điểm khác về việc sử dụng cookie cho tùy chọn "nhớ tôi", nhưng những gì tôi đang tìm kiếm là một cách thiết kế một cookie để ghi lại thành công của xác thực hai yếu tố. Ví dụ: Google thực hiện: Nếu bước thứ hai thành công (ví dụ: bạn đã nhập mã mà bạn nhận được qua SMS), thì nó sẽ đặt cookie tốt trong một khoảng thời gian (ví dụ: 30 ngày) có nghĩa là bước thứ hai có thể được bỏ qua. Gọi đây là "cookie xác minh". Sự hiểu biết của tôi là nếu trong thời gian đó bạn đăng xuất và sau đó một lần nữa, nó sẽ không làm bước thứ hai, nhưng chỉ là bước đầu tiên. (Tôi đã thử nghiệm điều này và dường như là như vậy.)Cần cookie để nhớ thành công xác thực hai yếu tố (không phải đăng nhập liên tục)
Câu hỏi của tôi là cách thiết kế cookie này. Một ý tưởng là đặt ID người dùng và số ngẫu nhiên 128 bit vào cookie, sau đó lưu trữ số đó trong cơ sở dữ liệu cùng với ID người dùng. Đây là những gì Charles Miller đề xuất (http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/) cho cookie đăng nhập liên tục.
Tuy nhiên, điều đó không đủ tốt, tôi nghĩ vậy. Vấn đề là, vì người dùng đang sử dụng ủy quyền hai yếu tố, bất kỳ cookie nào được sử dụng để ghi lại rằng bước thứ hai đã thành công, nên an toàn hơn trường hợp có ủy quyền một yếu tố.
Điều tôi muốn tránh là: Trình bẻ khóa có mật khẩu băm/muối từ cơ sở dữ liệu và bằng cách nào đó đã nhận được mật khẩu. Nếu anh ta/cô ấy có nhiều, tôi giả định rằng số ngẫu nhiên 128 bit trong cookie xác minh cũng có sẵn. (Nếu cracker đã nhận được mật khẩu theo cách khác, và không có cơ sở dữ liệu, thì cookie xác minh là an toàn trừ khi người đó có quyền truy cập vật lý vào máy tính. Tôi chỉ lo lắng về trường hợp cơ sở dữ liệu bị xâm nhập.)
Có thể một ý tưởng là mã hóa số ngẫu nhiên 128 bit? (Cần phải là 2 chiều - không phải là băm.) Khóa mã hóa sẽ có thể truy cập được vào ứng dụng, có thể được lưu trữ tuy nhiên các thông tin cơ sở dữ liệu là.
Có ai đã triển khai những gì tôi gọi là cookie xác minh không (không cookie đăng nhập liên tục) và có thể cho tôi biết (chúng tôi) cách thực hiện?
UPDATE: Suy nghĩ về vấn đề này, những gì tôi sẽ nghĩ là đủ an toàn sẽ là: Cookie gồm userID và 128-bit số ngẫu nhiên - gọi nó là R.
Cơ sở dữ liệu chứa mật khẩu và R, mỗi băm và muối (ví dụ, sử dụng PhPass). R sau đó được coi là một mật khẩu thứ hai. Lợi ích: Ngay cả khi mật khẩu đầu tiên là xấu (ví dụ: "password1"), R là một mật khẩu rất tốt. Cơ sở dữ liệu thực sự không thể bị nứt, vì vậy nó không phải là một lo lắng. (Tôi đã không cần thiết lo lắng về điều đó, tôi nghĩ vậy.)
tôi đã thêm một cách để khóa chặt các cookie cho trình duyệt: Trước khi băm, tôi kết nối những gì tôi gọi R với tác nhân người dùng + một số thuộc tính màn hình (DPI, chiều rộng, chiều cao, v.v ...). Tất nhiên, không có thuộc tính được nối nào được lưu trữ trong cookie, chỉ R là. Vì vậy, nếu cracker được R, anh/cô ấy sẽ phải chạy từ trình duyệt trên một máy tính với các thuộc tính tương tự. Không hoàn hảo, nhưng làm cho dữ liệu của cookie khó hơn nhiều. Tôi nghĩ rằng cách tiếp cận của tôi là tốt hơn so với những gì nhiều người làm, với là băm với IP. IP thay đổi thường xuyên hơn nhiều so với phiên bản trình duyệt hoặc màn hình máy tính. –