Как защитить сессию от кражи?
Простой тест:
- На одной машине я зашел на сайт (https)
- Я зашел на одну и ту же страницу на другой машине (не залогинен)
- Я переключил session_id в заголовке на второй машине - с первой машины
- На второй машине я получаю всю первую машину - я вошел в систему, могу легко просматривать ее данные и т. Д.
Как защитить сессию (и, возможно, токен csrf) от кражи?
1 ответ
- Убедитесь, что ваши сеансовые ключи не угаданы. GUID/UUID работает нормально здесь (или, лучше, хэширует выходные данные генератора криптографических случайных чисел).
- Убедитесь, что идентификатор никогда не передается в виде простого текста (используйте SSL)
- Обновляйте свой идентификатор сессии часто (скажем, каждые 5 минут или около того).
Выполнив вышеизложенное, злоумышленник не сможет перехватить идентификатор сеанса. Это также хорошая идея использовать безопасные куки. Это предотвратит отправку cookie для незащищенных ресурсов (например, загрузка изображений / CSS через http, который не требует аутентификации)
При желании вы можете попробовать привязать сеанс к IP-адресу, но это не идеальное решение. Он не защищается от атакующего за тем же NAT, что и пользователь, и не может аутентифицировать действительного пользователя, который имеет несколько маршрутов в Интернет.
Чтобы уточнить: вы всегда сможете увидеть свой собственный идентификатор сессии. Хитрость заключается в том, чтобы никто другой не мог это увидеть. Это фактически временный пароль. Защищенные куки шифруются на диске большинством браузеров (обратимые). Он снова зашифрован для передачи по SSL на сервер.
Предполагая, что вы разговариваете с нужным сервером [ другая проблема], единственный способ, которым злоумышленник может получить идентификатор сеанса, - это установить вредоносное ПО на ваш компьютер или взломать Ssl.
Частые изменения идентификатора означают, что у злоумышленника будет только короткое окно, прежде чем он должен начать все сначала.