2009-10-27 40 views
6

Tôi đang tìm kiếm các mẹo và ý tưởng về cách kết hợp xác thực tốt nhất với PHP bằng Cookie.Cách tốt nhất để sử dụng Cookie để xác thực bằng PHP là gì?

Mỗi tập lệnh php có nên kiểm tra giá trị cookie để xác định xem người dùng có còn đăng nhập không? Nên có một kịch bản nào thực hiện việc này và kiểm tra và bao gồm tập lệnh đó từ mỗi tập lệnh khác không? Giá trị cookie có thể được xem bởi php từ các độ sâu khác nhau của hệ thống tệp không?

Giống như: blahblahblah.com/ và blahblahblah.com/login/

Cả hai có thể đọc cookie không?

Rất nhiều câu hỏi trên một bài đăng nhưng cảm ơn!

+0

Bảo mật là khu vực mà, nếu bạn phải hỏi, bạn không đủ kinh nghiệm để tự mình xây dựng nó. Bạn chắc chắn sẽ tạo ra một lỗ hổng của một số loại, và cuối cùng trả tiền cho nó sau này. Có thư viện auth phong nha ra khỏi đó, được viết bởi những người có một sự hiểu biết sâu sắc về các vấn đề an ninh trong tầm tay. Chọn một và sử dụng nó. –

+0

Nếu nó không phải là một ứng dụng quan trọng, nó có thể rất hướng dẫn để xây dựng xác thực từ đầu. - Tuy nhiên, vì có nhiều khung công tác tốt (Zend Framework, Symfony, CakePHP), bạn sẽ nhận được kết quả tốt hơn nhiều nếu bạn không phát minh lại bánh xe và tự mình làm tất cả. –

+0

Cảm ơn mọi người vì câu trả lời của bạn. Rất hữu ích. Tôi đang sử dụng phiên php để giữ các giá trị đầu vào của biểu mẫu và có tập lệnh 'bắt đầu lại' phá hủy phiên. Đó là lý do tại sao tôi đang tìm cách sử dụng cookie để xác thực thay vì phiên của php. Nhưng dựa trên các câu trả lời cho chủ đề này, tôi cần phải giữ xác thực ở phía máy chủ. Và cảm ơn cho các tham chiếu khung php. Tôi đã sử dụng một vài nhưng không sử dụng Symfony hoặc CakePHP. Hãy thử chúng. –

Trả lời

3

không có gì an toàn ở phía máy khách.

Bạn thay đổi cờ đăng nhập trên Cookie dễ dàng trên bất kỳ trình duyệt nào. Do đó, bạn nên lưu dữ liệu liên quan đến đăng nhập trên $ _SESSION

của php Nếu bạn muốn gia hạn phiên, chỉ cần xem session_set_cookie_params().

Theo mặc định, cùng một phiên sẽ được sử dụng cho tên miền hiện tại và tất cả các đường dẫn trên tên miền đó. Vì vậy, nó có thể đọc được cho cả blahblahblah.com/ và blahblahblah.com/login/

Khi người dùng đăng nhập, hãy lưu tên người dùng và mã băm của mật khẩu trong Phiên.

Khi bắt đầu mỗi tập lệnh, hãy xác minh tên người dùng và mật khẩu của phiên bằng mật khẩu và tên người dùng của phiên trong cơ sở dữ liệu. Nếu đúng, hãy đặt cờ (ví dụ: $ userLoggedIn = true) để chỉ ra phía máy chủ mà người dùng đã đăng nhập. Else false.

0

Một ý tưởng hay là có một tập lệnh thực hiện kiểm tra phiên/đăng nhập và đưa nó vào các trang bảo mật. AS cho độ sâu, bạn có thể xác định rằng trong setcookie() nếu tham số thư mục được đặt thành "/" thì có thể truy cập tất cả. Bạn có thể quyết định xây dựng hệ thống phiên của riêng mình dựa trên dữ liệu được mã hóa trong cookie và có thể làm việc quá, nhưng một lần nữa, phiên, mà lưu trữ dữ liệu ở phía máy chủ được khuyến nghị.

0

Cookie là cho mỗi miền, vì vậy cho dù bạn ở sâu trong cấu trúc thư mục, cookie sẽ được đọc OK (miễn là tên miền của bạn vẫn giữ nguyên - NB điều này có nghĩa là www.example.com và ví dụ. com có ​​thể là các cookie khác nhau).

Tôi khuyên bạn nên có kiểm tra xác thực so sánh ID phiên trong cookie, ví dụ: danh sách bảng cơ sở dữ liệu đã đăng nhập người dùng và ID phiên của họ - séc này có thể nằm trong tệp phương pháp/bao gồm riêng() 'd trên mỗi trang. Bằng cách đó, kiểm tra sẽ được thực hiện trên mọi lần tải trang. NB điều này là cơ bản và có nhiều phương pháp bảo mật hơn - một số đã được đề cập trong các nhận xét khác tại đây.

Như Mauris said, không có gì an toàn ở phía máy khách - không sử dụng cookie để lưu trữ giá trị "logged_in" mà bạn kiểm tra đúng/sai!

2

Một số suy nghĩ, không theo thứ tự đặc biệt:

  • riêng ra các lớp khác nhau: lưu trữ liên tục vs xác thực.
  • Phiên PHP khá mạnh mẽ và là cách được khuyến nghị để duy trì lưu trữ liên tục.
  • Bạn có thể có phiên hợp lệ, nhưng không phải là thông tin đăng nhập hợp lệ.
  • Tránh nhiều cookie. Một là đủ. Các phiên PHP hoạt động với một cookie.
  • Bạn có thể đặt tên miền phụ và đường dẫn trên cookie, nhưng có rất ít điểm trừ khi bạn đặt nhiều, không được khuyến nghị (xem ở trên).
  • Đặt mọi thứ bạn nghĩ bạn có thể muốn trong cookie trong phiên thay thế.
  • Bạn nên có một số mã phổ biến mà tất cả các trang của bạn bao gồm. Đó là nơi bạn khởi tạo phiên của mình. Sau đó mọi thứ sẽ hoạt động. Nó cũng có thể xác minh đăng nhập là hợp lệ, quá.
  • Có một nơi xác thực đăng nhập và mọi thứ liên quan đến điều đó.
  • Đừng quên màn hình đăng xuất!
Các vấn đề liên quan