Захват сеанса и PHP

Давайте просто рассмотрим доверие, которое сервер имеет к пользователю.

Фиксация сеанса: во избежание фиксации я использую "session_regenerate_id()" ТОЛЬКО при аутентификации (login.php)

Захват сеанса: шифрование SSL для всего сайта.

Я в безопасности?

Спасибо.

Ответ 1

Считать OWASP A3-Broken Authentication и Session Management. Также читайте о 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, который является одним из способов, с помощью которого может возникать Session Hijacking. Принудительное использование только HTTPS файлов - это хороший способ обращения к OWASP A9-Недостаточная защита транспортного уровня. Этот способ использования HTTPS иногда называют "безопасным куки", что является ужасным именем для него. Также STS - очень классная функция безопасности, но не все браузеры поддерживают ее (пока).

Ответ 2

Я также предлагаю хранить в сеансе пользовательский агент и информацию об ip и проверять его на каждый запрос. Это не пуленепробиваемый, но это довольно значительное увеличение надежности. В то время как ковка UA действительно легка, IP-ковка, хотя это возможно, намного сложнее... Но у вас могут быть проблемы с пользователями, которые находятся за круговой IP-системой, такой как пользователи AOL...

Ответ 3

наилучшей практикой, которую я когда-либо находил, является сохранение данных сеанса в базу данных или текстовый файл. база данных будет иметь пользовательский агент и запись IP и проверять каждый запрос, чтобы убедиться, что сеанс никогда не был захвачен другим.

например, как сеанс, сохраненный в базе данных, вы можете увидеть реализацию в библиотеке сеансов codeigntier. на мой взгляд, этот способ достаточно сэкономит, чтобы кто-то не смог выполнить сеанс hijact.