Làm cách nào để sử dụng cookie một cách an toàn để xác thực người dùng?


7

Trong hầu hết các trường hợp, tôi thích sử dụng cookie để nhớ người dùng quay lại trang web của mình.

Trong những ngày đầu / dại dột, tôi sẽ lưu trữ UserID (số nguyên tăng tự động) trong cookie và nếu người dùng quay lại, tôi sẽ sử dụng giá trị cookie đó để đăng nhập chúng tự động. Đây là một ý tưởng tồi vì ai đó có thể dễ dàng chỉnh sửa cookie để sử dụng một số nguyên khác và đăng nhập như một người khác.

Có thể lưu trữ UserID theo cách tương tự nếu UserID là GUID không?

Các thực hành tốt nhất để lưu trữ cookie "nhớ tôi" là gì?


Tôi cảm thấy như đây là một câu hỏi loại quản trị trang web thích hợp (không biết ngôn ngữ). Nếu mọi người cảm thấy đó là câu hỏi của StackOverflow, tôi sẽ có nghĩa vụ phải xóa nó hoặc một cái gì đó.
jliegavin

Tôi tin rằng đây thực sự là một kịch bản Stack Overflow, bởi vì ngay cả khi nó không rõ ràng, vẫn có rất nhiều biến số liên quan đến việc trả lời câu hỏi và bởi vì nó liên quan đến bảo mật, rất có thể là SF (không có quy tắc nào nói rằng quản trị trang web có trở thành một lập trình viên)
Mark Henderson

Cá nhân tôi cảm thấy như đây là một câu hỏi chính đáng cho trang web này. Mặc dù nó có khá nhiều "liên quan đến lập trình". Tuy nhiên, tôi cũng đặt một câu hỏi "liên quan đến lập trình" theo nghĩa quản trị trang web và nó đã bị đóng vì lạc đề ( webmasters.stackexchange.com/questions/527/ .) Tôi không chắc chắn nên đi theo hướng nào, nhưng cần có sự nhất quán.
Đánh dấu Hatton

Câu trả lời:


2

Bạn nên xem xét sử dụng các phiên để xử lý loại kịch bản này.

Các phiên thường hoạt động bằng cách tạo GUID duy nhất cho xác thực người dùng và lưu nó vào cookie trên máy cục bộ của người dùng hoặc chuyển nó xung quanh, từ trang này sang trang khác, thông qua URL.

Phiên GUID này trỏ đến mục nhập tệp hoặc cơ sở dữ liệu trên máy chủ có thể được đọc và ghi bằng mã nguồn của bạn, bằng cách liên kết GUID trong cookie / URL của người dùng với GUID của mục nhập tệp hoặc cơ sở dữ liệu chứa dữ liệu của bạn.

Nói chung, an toàn khi đưa dữ liệu nhạy cảm hơn (như ID người dùng) vào các phiên vì người dùng cuối không nhìn thấy gì ngoại trừ phiên GUID.

Hầu hết các ngôn ngữ dựa trên web sẽ có một số loại quản lý phiên được tích hợp.


Bối cảnh câu hỏi của tôi là xung quanh ý tưởng về tính năng "nhớ tôi lần sau khi tôi truy cập trang web của bạn". Nếu tôi đã sử dụng các biến phiên để xác thực, nó sẽ chỉ tồn tại cho phiên duyệt hiện tại.
jessegavin

1

Lưu hai cookie:

  • UserId: chứa id người dùng
  • Password: chứa SHA1 của mật khẩu người dùng

Rất dễ dàng và an toàn. Hãy nhớ thuộc tính HttpOnly .


1
Hum, băm mật khẩu trong cookie? Điều đó không an toàn vì ai đó có thể sử dụng một cuộc tấn công từ điển.

1
Không, nếu anh ta sử dụng muối;) ...
Wookai

1
Tôi vẫn sẽ cảm thấy rất bẩn nếu tôi lưu trữ mật khẩu ở bất cứ đâu trừ cơ sở dữ liệu dưới dạng băm. Làm thế nào về một định danh phiên ngẫu nhiên cộng với ID người dùng? Mã định danh phiên thay đổi khi phiên hết hạn hoặc người dùng đăng xuất. Ngoài ra, sau đó bạn có thể đăng xuất người dùng ở phía sau bằng cách hủy định danh phiên của họ trong cơ sở dữ liệu. Bạn không thể ép buộc ai đó đăng xuất bằng cách hủy mật khẩu của họ.
Đánh dấu Henderson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.