2011-01-20 47 views
8

Trong thời gian tôi đã dành thời gian nghỉ học cách PHP hỗ trợ Unicode, tôi đã tìm cách làm cho các cookie "Remember Me" của tôi an toàn hơn một chút. Tuy nhiên có một vài điều tôi không hiểu và một vài suy nghĩ của riêng tôi tôi muốn một số gợi ý và ý kiến.PHP: Ghi nhớ và bảo mật?

1) Có phương pháp nào để áp dụng tính năng "Ghi nhớ" không liên quan đến cookie không? Tò mò vì có lỗ hổng bảo mật rõ ràng trong việc lưu trữ cookie xác thực. Không phải là không có rủi ro về bảo mật trong mọi thứ.

2) Vì tôi không làm việc với thông tin ngân hàng hoặc "có độ nhạy cao", có cần phải yêu cầu người dùng nhập mật khẩu của họ cho các khu vực "cấu hình cao" hơn không? Dường như việc nhớ một thông tin đăng nhập sẽ là một sự lãng phí nếu chúng ta chỉ yêu cầu họ về cơ bản đăng nhập sau hai phút sau đó.

3) Phương pháp tốt nhất tuyệt đối để lưu trữ cookie xác thực (ngoài "không hề") là gì? Tôi hiện đã mã hóa khu vực đó để đặt một mã thông báo duy nhất trong cookie (được băm bằng cách sử dụng time(), tác nhân người dùng của họ, remote_addr và một muối - sha256). Khi người dùng nói trở lại, nó kiểm tra bảng 'phiên' cho mã thông báo, sau đó kết hợp IP với IP để đăng nhập. Nếu mã thông báo ở đó nhưng IP không khớp với âm thanh đó sẽ tắt cookie và yêu cầu họ đăng nhập nếu họ không có.

Cảm ơn mọi người một lần nữa.

+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 Bạn sẽ cần một số lưu trữ liên tục ở phía máy khách cho những gì bạn đang cố gắng làm - và do đó các cookie là lựa chọn lý tưởng. – caw

Trả lời

6
  1. Về bản chất, không. Nó đòi hỏi một số loại lưu trữ ở phía khách hàng; bạn không có cách nào để biết ai là khách hàng không có cookie (hoặc tương tự, như lưu trữ phía máy khách HTML 5).

  2. Đó là sự cân bằng mà bạn phải quyết định. Tối thiểu, mật khẩu cũ hoặc một số hình thức xác nhận khác (e-mail?) Phải được yêu cầu để thay đổi mật khẩu mới.

  3. Bạn hoàn toàn không thể bảo vệ chống lại hành vi trộm cắp cookie và mạo danh tiếp theo trừ khi bạn mã hóa tất cả các liên lạc. Đó là phương pháp an toàn duy nhất. Chắc chắn, việc liên kết IP, tác nhân người dùng, v.v. với cookie có thể hữu ích, nhưng sẽ dễ dàng hơn và an toàn hơn để dựa vào mã hóa. (Tôi đã hiểu sai điểm ở đây - điều quan trọng trong giá trị của cookie là ngẫu nhiên, vì vậy bạn nên thay đổi phương pháp thế hệ của mình để ít có thể dự đoán được)

+0

1) Đã không nghĩ như vậy, nhưng tôi nghĩ rằng nó có thể có giá trị yêu cầu anyway cho những ý tưởng cấp tiến có thể. ;) 2) Tôi chắc chắn sẽ yêu cầu mật khẩu cũ để cập nhật bất kỳ thông tin nào như email, tên người dùng, mật khẩu, v.v. Tôi chủ yếu dành cho những thứ như mua bất cứ thứ gì (nó là một gameite để người dùng có các tùy chọn như vậy), giao dịch với những người dùng khác, điều đó. 3) Tôi đã thực sự đề cập đến hệ thống lưu trữ/kiểm tra (cách thức hoạt động của nó cho mỗi lần ban đầu của tôi) như trái ngược với mã hóa hoặc không mã hóa. – Zydeco

+0

@Zyd Ah Tôi nghĩ bạn đang nói rằng bạn chỉ chấp nhận một cookie nhất định nếu IP, tác nhân người dùng, v.v. phù hợp. Yêu cầu duy nhất của cookie là nó đủ ngẫu nhiên nên không thể đoán được. Phương pháp bạn đang sử dụng không phải là rất tốt bởi vì nó là một chút dự đoán được - mặc dù muối, nếu đủ lớn, có thể bù đắp điều này. Trong mọi trường hợp, bạn nên thay đổi nó. – Artefacto

+0

Để rõ ràng hơn: Sử dụng HTTPS và đặt cờ 'an toàn 'trên cookie, tránh hầu hết các dạng tấn công cookie (trừ khi máy của người dùng bị xâm nhập). – deceze

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