Как зашифровать идентификатор сессии в cookie? - PullRequest
7 голосов
/ 11 апреля 2010

Когда я читал статьи о перехвате сеанса, я узнал, что было бы неплохо зашифровать значение идентификатора сеанса, которое хранится в cookie.

Насколько я знаю, когда я запускаю сеанс с помощью вызова session_start(), PHP не шифрует значение идентификатора сеанса в файле cookie.

Как зашифровать значение идентификатора сеанса и затем инициализировать сеанс с ним?

Ответы [ 8 ]

19 голосов
/ 11 апреля 2010

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

5 голосов
/ 11 апреля 2010

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

3 голосов
/ 11 апреля 2010

Предполагая, что ваш файл cookie сеанса является GUID, нет смысла его шифровать. Он просто заменит одну псевдослучайную строку другой.

1 голос
/ 11 апреля 2010

Это всегда хорошая идея, чтобы никогда не зависеть только от одного куки или элемента для проверки ваших (вошедших в систему) пользователей. Как упомянуто выше, это хорошая идея, чтобы также сохранить IP и проверить с этим. Хорошим дополнением было бы сохранение USER_AGENT.

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

1 голос
/ 11 апреля 2010

Создайте этот сценарий, откройте его из веб-браузера и проверьте файлы cookie.

<?php
  session_start();
?>

Вы, вероятно, увидите что-то подобное

Site         Cookie      Value
mysite.com   PHPSESSID   6fktilab3hldc5277r94qh2204

PHP отлично работает, если генерирует красивый, уникальный идентификатор. Нет смысла шифровать это.

1 голос
/ 11 апреля 2010

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

Единственное, что может этому помешать, это уловка, когда вы отправляете кому-то ссылку с? PHPSESSID = foo, которая заставит PHP создать этот сеанс. Вы можете предотвратить это, используя шифрование и проверку, но лучше полностью отключить передачу идентификатора сеанса в URL.

0 голосов
/ 11 июня 2016

Имеет смысл шифровать данные cookie, когда вы используете cookie для хранения конфиденциальной информации. что только сервер должен читать (расшифровывать).

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

0 голосов
/ 11 апреля 2010

Идентификатор сеанса относительно неосуществим, поэтому проблема не в этом.

Есть вещи, которые вы можете сделать, чтобы противостоять атакам:

  • создать новый сеанс при входе пользователя в систему
  • ограничение продолжительности сеанса

Есть и много других вещей. Я всегда рекомендую изучить Rails Guide по этим вопросам - он предлагает очень доступное объяснение известных проблем и контрмер - все они в равной степени применимы к PHP-коду.

...