2010-07-01 45 views
7

Phiên bản mới cho php tại đây. Dữ liệu người dùng được lưu trữ của tôi khá nhỏ và không quá nhạy cảm nhưng tất nhiên tôi vẫn muốn một trang web an toàn. Tôi đã lưu trữ mật khẩu băm của họ trong db của tôi với muối.Việc lưu trữ mật khẩu người dùng trong một phiên PHP có phổ biến không?

Tôi có cần xác thực người dùng trên mọi trang trong trang web của mình bằng mật khẩu hay quá mức không? Nói cách khác, nếu họ đã thành công "đăng nhập" và tôi đã lưu tên người dùng của họ trong một phiên php là đủ tốt để họ đi lang thang xung quanh, với trang web biết họ là ai?

Tôi hỏi vì có vẻ như lưu trữ mật khẩu người dùng trong một phiên có lẽ không phải là ý tưởng hay nhất. Điều đó có đúng không?

Trả lời

8

Bạn không cần phải xác thực theo mọi yêu cầu, nhưng bạn cần phải ủy quyền theo mọi yêu cầu.

Xác thực là nơi bạn xác thực tên người dùng/mật khẩu của người dùng đối với cơ sở dữ liệu. Khi họ đã xác thực thành công, bạn chỉ cần lưu trữ ID người dùng (hoặc tên người dùng) của họ trong phiên.

Trên mọi yêu cầu tiếp theo, hãy kiểm tra để đảm bảo rằng phiên hiện tại là được ủy quyền để xem nội dung được yêu cầu. Trong trường hợp của bạn, bạn có thể chỉ cần đảm bảo rằng có một ID người dùng hợp lệ trong phiên ... bạn không phải làm bất cứ điều gì với cơ sở dữ liệu.

Bạn có thể sử dụng một chức năng tương tự như sau để ủy quyền trên mọi yêu cầu:

function isAuthorized() { 
    return isset($_SESSION['user_id']) && ($_SESSION['user_id'] != 0); 
} 

Bạn có thể làm điều này ngay cả an toàn hơn bằng cách quản lý dữ liệu phiên của riêng bạn trong một cơ sở dữ liệu, và sau đó bạn không có đặt nhiều niềm tin vào cookie, có thể được người dùng (độc hại) giao dịch/đánh cắp/v.v. Nhưng đó thường là quá mức cần thiết đối với hầu hết các ứng dụng web.

2

Tôi sẽ không lưu mật khẩu trong phiên, bạn chỉ có thể lưu trữ mà họ đã đăng nhập trong phiên.

$_SESSION['uerlogged'] = $mytoken; 

Sau đó, kiểm tra tải trang để xem nếu $_SESSION['userlogged'] được đặt.

Bạn cũng có thể muốn xem xét thêm trong biện pháp phòng ngừa cho phiên hi-cướp Hãy xem - PHP: Preventing Session Hijacking with token stored as a cookie?

+0

Rất tiếc, xin lỗi về việc ghi đè đó ... – Piskvor

5

Không lưu trữ mật khẩu. Thay vào đó, lưu trữ một mã thông báo xác thực mà bạn có thể kiểm tra sự tồn tại của một bảng riêng biệt.

1

Không thực sự cần thiết để lưu trữ mật khẩu trong phiên. Bạn nên có cờ trạng thái để cho biết liệu chúng có được xác thực cùng với một số loại đối tượng xác định ai là người dùng và thông tin về họ hay không.

0

Lưu trữ mật khẩu trong phiên không khác gì lưu trữ tên người dùng trong phiên khi người dùng đăng nhập, do đó, không lưu mật khẩu.

Nó sẽ chỉ hoạt động như tên người dùng được lưu trữ, là đủ (ngay cả một lá cờ sẽ làm).

0

Người dùng không thể sửa đổi phiên, bạn chỉ có thể lưu trữ tên người dùng ở đó và tin tưởng rằng nó sẽ luôn chính xác.

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