В то время как я читал о статьях перехвата сеанса, я узнал, что будет хорошо зашифровать значение идентификатора сессии, которое хранится в cookie.
Насколько я знаю, когда я запускаю сессию путем вызова session_start()
, PHP не шифрует значение идентификатора сессии в cookie.
Как я шифрую значение идентификатора сессии и затем инициализирую сессию с ним?
Шифрование не поможет. В любом случае cookie сеанса - это просто магическое число. Шифрование означает, что нужно захватить другое магическое число. В зависимости от того, какие сценарии угона вы имеете в виду, существуют и другие возможные способы смягчения последствий. Например, вы можете ограничить сеансы одним IP. Однако это создает некоторые проблемы, например люди переключаются между точками беспроводной связи.
Это всегда хорошая идея - никогда не зависеть только от одного куки или элемента для проверки вашего (вошедшего) пользователя (пользователей). Как упоминалось выше, хорошей идеей является также хранение IP и проверка по нему. Хорошим дополнением будет хранение USER_AGENT.
Имейте в виду, что если ваше приложение с открытыми исходными кодами, то вам будет так же хорошо с одним только идентификатором сессии, потому что хакер может легко определить, что именно вы проверяете.
Идентификатор сеанса относительно трудно угадать, так что проблема не в этом.
Есть вещи, которые вы можете сделать, связанные с этим, чтобы противодействовать атакам:
Есть еще немало других вещей. . Я всегда рекомендую изучить Rails Guide по этим вопросам - он предлагает очень доступное объяснение известных проблем и контрмер - все в равной степени применимо к PHP-коду.
Более важно, чтобы ваши идентификаторы сеанса были случайными (то есть кто-то не может использовать свой идентификатор сеанса, чтобы угадать идентификатор другого человека), поскольку реальная опасность кто-то получает в свои руки идентификатор сеанса другого пользователя. Пока вы сохраняете их случайным образом, нет никаких причин или пользы в их шифровании
Если предположить, что ваша сессионная cookie - это GUID, то нет смысла ее шифровать. Это просто заменит одну псевдослучайную строку на другую.
К сожалению, шифрование идентификатора сеанса не сильно повысит безопасность, так как злоумышленник может просто использовать зашифрованную форму (которая в любом случае является для него единственной видимой ).
Единственное, что это может предотвратить, - это уловка, при которой вы отправляете кому-то ссылку с? PHPSESSID = foo в ней, что заставляет PHP создавать этот сеанс. Вы можете предотвратить это, используя шифрование и проверку, но лучше полностью отключить передачу идентификатора сеанса в URL-адресе.
Сделайте этот скрипт, получите к нему доступ из веб-браузера, а затем проверьте свои файлы cookie.
<?php
session_start();
?>
Скорее всего, вы увидите что-то подобное
Site Cookie Value
mysite.com PHPSESSID 6fktilab3hldc5277r94qh2204
PHP отлично справляется с генерацией хорошего, уникального идентификатора. Нет смысла шифровать это.