2009-09-11 24 views
11

Điều tốt nhất để lưu trữ trong cookie là gì để giữ trạng thái đăng nhập liên tục?Điều gì sẽ được lưu trữ trong cookie cho hệ thống đăng nhập?

Tôi đã thấy nhiều trang web (và hướng dẫn cho người mới bắt đầu!) Chỉ lưu trữ một cái gì đó như validUser = 1 trong cookie. Rõ ràng là tôi có thể giả mạo điều đó và trang web sẽ cho rằng tôi là người dùng hợp lệ.

Nếu tên người dùng được lưu trữ trong cookie, tôi có thể giả mạo là bất kỳ người dùng nào bằng cách gửi cookie có tên người dùng trong yêu cầu của tôi. Nếu bạn lưu trữ tên người dùng mật khẩu trong cookie, thì tôi phải biết tên người dùng và mật khẩu để đăng nhập. Thay vì phải tự nhập thông tin đăng nhập vào hộp mỗi lần, trình duyệt sẽ tự động gửi chúng với mọi yêu cầu trang.

Nhưng đây vẫn là một ý tưởng tồi? Lưu trữ một mật khẩu văn bản thuần túy không phải là một ý tưởng tuyệt vời, nhưng đó là cách nó sẽ được gửi trong dữ liệu POST khi đăng nhập. Và bên cạnh đó, nó có thể được lưu trữ băm. Nhưng tôi vẫn không cảm thấy thoải mái với nó.

Có lẽ không nên sử dụng cookie để lưu trữ bất kỳ thứ gì ngoại trừ ID phiên và dữ liệu người dùng được lưu trữ trên chính máy chủ. Đó có lẽ là một vị trí an toàn hơn cho nó, giả sử rằng máy chủ không được chia sẻ.

Nhìn vào một số phần mềm nguồn mở như phần mềm diễn đàn, chúng sử dụng một hệ thống phức tạp hơn, nhưng tôi không thể hiểu chính xác những gì nó đang làm từ việc lướt mã.

Tiêu chuẩn "thực hành tốt nhất" là gì?

+1

Vậy đơn giản là chỉ lưu trữ id người dùng trong phiên đó? Đó là an toàn, và không cần phải lưu trữ thêm thông tin về một đăng nhập cụ thể trong cơ sở dữ liệu? (ví dụ: IP) và để thay đổi tất cả phiên/dữ liệu bất cứ khi nào họ truy cập lại, như tôi đã thấy các tập lệnh lớn này đang hoạt động? – Rob

+0

Bạn nên sử dụng lại khung xác thực hiện tại bất cứ khi nào có thể, bởi vì, thực sự, nó phức tạp. Ví dụ: hãy xem https://github.com/delight-im/PHP-Auth – caw

Trả lời

6
+0

Liên kết thứ hai hiện đã bị hỏng. –

+0

@DrTwox Hiện đã có. –

+6

Câu trả lời chỉ chứa các liên kết không phải là câu trả lời hay. Câu trả lời này nên được chỉnh sửa để bao gồm một bản tóm tắt các bài báo được liên kết. (Phải, tôi biết đó là câu trả lời rất cũ rồi.Tuy nhiên, nhận xét về liên kết bị hỏng minh họa hoàn toàn nhu cầu tóm tắt các liên kết.) –

3

Thực hành tốt nhất là nên sử dụng một SESSION thay vì một COOKIE cho dữ liệu sử dụng. COOKIES được sử dụng để lưu trữ thông tin chung không phải thông tin cụ thể về người dùng, đó là những gì SESSIONS được sử dụng cho.

0

Cách tốt nhất là lưu trữ id phiên được tạo ngẫu nhiên. Phiên sau đó lưu trữ id người dùng hoặc bất kỳ thứ gì khác bạn cần để lưu trữ. Trong PHP, phương thức session_start() sẽ tự động tạo id phiên và cookie có tên PHPSESSID, vì vậy bạn chỉ cần lo lắng về việc lưu trữ dữ liệu trong mảng $ _SESSION, không phải trong cookie.

0

Điều duy nhất nên có trong cookie là sessionid được tạo bởi PHP (và điều này được thực hiện tự động khi bạn sử dụng phiên). Bạn không nên lưu trữ bất kỳ thứ gì trong cookie ngoại trừ tên người dùng được nhớ cho mục đích của hộp kiểm "nhớ thông tin đăng nhập của tôi".

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