Давайте просто рассмотрим доверие, которое сервер имеет к пользователю.
Фиксация сеанса: Чтобы избежать фиксации, я использую session_regenerate_id ()
ТОЛЬКО в аутентификации (login.php)
Session sidejacking : SSL-шифрование для всего сайта.
Я в безопасности?
Чтение OWASP Аутентификация и управление сеансом A3 . Также прочтите о OWASP A5-CSRF , который иногда называют «сеансовым управлением».
Вы должны использовать этот код в файле заголовка php:
ini_set('session.cookie_secure',1);
ini_set('session.cookie_httponly',1);
ini_set('session.use_only_cookies',1);
session_start();
Этот код предотвращает фиксацию сеанса . Это также помогает защитить от xss при доступе к document.cookie
, что является одним из способов возможного взлома сеанса . Применение файлов cookie только для HTTPS является хорошим способом решения проблемы OWASP A9-Недостаточная защита транспортного уровня . Такой способ использования HTTPS иногда называют «безопасными файлами cookie», что является ужасным названием для него. Также STS - очень хорошая функция безопасности, но не все браузеры поддерживают ее (пока).
Я бы также предложил сохранять в сеансе информацию о пользовательском агенте и IP-адресе и проверять ее при каждом запросе. Он не пуленепробиваемый, но его надежность значительно повысилась. В то время как подделка UA действительно проста, подделка IP, хотя и возможна, НАМНОГО сложнее ... Но у вас могут быть проблемы с пользователями, которые используют систему IP с циклическим перебором, такими как пользователи AOL ...
Лучшая практика, которую я когда-либо находил, - это сохранение данных сеанса в базе данных или текстовом файле. в базе данных будет пользовательский агент и IP-запись, и она будет проверяться при каждом запросе, чтобы убедиться, что сеанс никогда не был перехвачен другим лицом.
например, как сеанс сохраняется в базе данных, вы можете увидеть реализацию в библиотеке сеансов codeigntier. на мой взгляд, этот способ достаточно сэкономить, чтобы предотвратить захват сеанса кем-либо.