Tôi đã tạo một hệ thống đăng nhập bằng cách sử dụng các phiên PHP.Phiên đăng nhập này có an toàn không?
Dưới đây là cách hoạt động:
1.) khi người dùng đăng nhập (với các thông tin đăng nhập hợp lệ): thông tin của họ (username
và password
) đều được lưu trữ trong một phiên, cùng với một vài bit khác thông tin: The Expire time
: Đây chỉ là 5 phút thêm vào thời điểm hiện tại (vì vậy nếu người dùng đăng nhập là lúc 22:30 thời gian sẽ hết hạn 22:35).
2.) Trên mỗi lượt xem trang của người dùng đang đăng nhập: Phiên được kiểm tra xem có tồn tại hay không. Nếu không, người dùng sẽ được chuyển hướng đến trang đăng nhập. Nếu phiên không tồn tại, nó sẽ kiểm tra expire time
và so sánh nó với current time
. Nếu expire time
là hơn thì current time
(người dùng đã không hoạt động cho 5 + phút) sau đó chi tiết người dùng của họ (trong phiên) được kiểm tra (so với những người trong cơ sở dữ liệu) và phiên Expiretime
được cập nhật, nhưng nếu expire time
ít sau đó là current time
, Nó sẽ không kiểm tra bất kỳ chi tiết nào, cập nhật phiên expire time
và sẽ cho phép người dùng tiếp tục. Tôi đã làm điều đó để ngăn chặn truy vấn liên tục trên DB để tiết kiệm băng thông. Vì vậy, về cơ bản, khi người dùng đăng nhập thành công, tên người dùng và mật khẩu của họ sẽ không được kiểm tra lại trên DB cho đến khi họ trở thành không hoạt động (ở lại một trang) trong 5 phút hoặc nếu họ đăng xuất.
quên đề cập đến một cái gì đó chàng trai: Các hết hạn thời gian phiên được thực sự gọi là expire_time_unique_characters
($_SESSION['expire_time_'.$unique_nu]
) có nghĩa là người ác cũng sẽ phải tìm ra $unique_nu
khi giả mạo phiên ...
tôi chỉ có cảm giác này không an toàn lắm.
Ngoài ra, các dự án này là dành cho là mã nguồn mở (mọi người có thể xem mã nguồn) để đặt ra một nguy cơ còn cao hơn ở đây ...
có thể các bạn cho tôi một số thông tin phản hồi?
Cảm ơn
Tại sao lưu trữ kết hợp người dùng/mật khẩu trên máy chủ trong văn bản rõ ràng? Làm thế nào là _that_ nghĩa vụ phải cải thiện an ninh? Nếu người dùng/mật khẩu đã sai, hơn phiên sẽ không được thiết lập ở nơi đầu tiên, phải không? –
@Niklas Phiên sẽ chỉ được tạo khi đăng nhập thành công đã được hoàn thành. –
Sau đó, bạn không cần phải kiểm tra lại kết hợp đăng nhập sau mỗi vài phút. Chỉ cần không lưu trữ tên người dùng/mật khẩu trên máy chủ. Ngoài ra, đừng lưu trữ chúng trong cơ sở dữ liệu! Sử dụng một thuật toán băm mạnh cho điều này (tốt nhất với kéo dài khóa) –