Tôi đang phát triển hệ thống đăng nhập và xác thực cho một trang web PHP mới và đã được đọc về các cuộc tấn công và lỗ hổng khác nhau. Tuy nhiên, đó là một chút bối rối, vì vậy tôi muốn kiểm tra xem cách tiếp cận của tôi có hợp lý không.Phát triển chiến lược xác thực và đăng nhập PHP an toàn
tôi có kế hoạch lưu trữ các dữ liệu sau:
Trong phiên họp: sử dụng id, băm + muối
HTTP_USER_AGENT
Trong cookie và trong cơ sở dữ liệu: thẻ ngẫu nhiên , hashed + salted identifier
Trên mọi trang, tôi kế hoạch thực hiện các việc sau:
Nếu có phiên, hãy xác thực bằng cách sử dụng điều đó. Kiểm tra xem
HTTP_USER_AGENT
có khớp với số trong phiên được lưu trữ không.Nếu không có phiên nào tồn tại, hãy sử dụng cookie để xác thực. Kiểm tra mã thông báo và mã nhận diện trong cookie khớp với các mã trong cơ sở dữ liệu.
Nếu cookie không hợp lệ hoặc không tồn tại, hãy yêu cầu người dùng đăng nhập.
Có bất kỳ sai sót rõ ràng nào trong vấn đề này không? Miễn là tôi đặt một thời gian chờ trong cookie, tôi nên khá an toàn, phải không? Có điều gì tôi đang thiếu?
Rất cám ơn trước.
cũng xem xét sử dụng một số hệ thống sử dụng mã thông báo cho các hành động quan trọng ... – TheHippo
Chính xác, lưu trữ id phiên trong cơ sở dữ liệu là lỗi lớn. Bằng cách lưu trữ các id phiên trong cơ sở dữ liệu bạn làm cho tiêm sql chống lại hệ thống của bạn có giá trị hơn nhiều. Bạn phải giả định rằng hệ thống của bạn sẽ bị xâm phạm và bạn phải có kế hoạch hành động để giải quyết vi phạm. Đây là lý do tại sao mật khẩu được lưu trữ dưới dạng băm. Hơn nữa php đi kèm với một trình xử lý phiên, nếu bạn tái phát minh ra sự rên rỉ, tôi đảm bảo với bạn rằng nó sẽ kém an toàn hơn. – rook
Có rất nhiều bài đọc tốt ở đây: http://stackoverflow.com/questions/549/the-definitive-guide-to-website-authentication-beta#477579 –