Когда и почему я должен использовать идентификатор восстановления сеанса()?


Почему и когда я должен использовать функцию session_regenerate_id() в php? Должен ли я всегда использовать его после того, как я использую session_start()? Я читал, что я должен использовать его, чтобы предотвратить фиксацию сеанса, это единственная причина?

Author: Mattia, 2014-04-09

7 answers

Что такое session_regenerate_id()?

Как следует из названия функции, это функция, которая заменит текущий идентификатор сеанса новым и сохранит информацию о текущем сеансе.

Что он делает?

Это в основном помогает предотвратить атаки с фиксацией сеанса. Атаки с фиксацией сеанса - это когда злоумышленник пытается использовать уязвимость в системе, чтобы зафиксировать (установить) идентификатор сеанса (SID) другого пользователя. Поступая таким образом, они получат полный доступ в качестве исходного пользователя и смогут для выполнения задач, которые в противном случае потребовали бы аутентификации.

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

Когда я должен использовать session_regenerate_id()?

Как указывает symbecean в комментариях ниже, идентификатор сеанса должен быть изменен при любом переходе в состояние аутентификации и только при аутентификации переходы.

Дальнейшее чтение:

 71
Author: Amal Murali, 2016-01-28 12:04:40

Вы должны использовать session_regenerate_id(), чтобы остановить захват сеанса и фиксацию сеанса.

Из этой Безопасности.SE ответ:

Захват сеанса относится к краже файла cookie сеанса. Это проще всего сделать при совместном использовании локальной сети с другими компьютерами, например, в Starbucks. Пример... пользователь с сессией Y просматривает веб-сайт Джеймса в Starbucks. Я слушаю их сетевой трафик, потягивая свой латте. Я беру пользователя с помощью файлов cookie сеанса Y для веб-сайта Джеймса и настроил свой браузер на их использование. Теперь, когда я захожу на сайт Джеймса, сайт Джеймса.

С этой веб-страницы:

Фиксация сеанса - это метод атаки, который приводит идентификатор сеанса пользователя к явному значению. В зависимости от функциональности целевого веб-сайта, для "исправления" значения идентификатора сеанса может быть использован ряд методов. Эти методы варьируются от использования межсайтовых сценариев до перчения веб-сайта с ранее сделанными HTTP-запросами. После исправления идентификатора сеанса пользователя злоумышленник будет ждать, пока этот пользователь войдет в систему. Как только пользователь сделает это, злоумышленник использует предопределенное значение идентификатора сеанса, чтобы присвоить себе ту же онлайн-личность.

Когда Использовать

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

См. также:

PHP Руководство по безопасности: Сеансы

Фиксация сеанса (Приятно читать)

 20
Author: Dimag Kharab, 2017-03-17 10:45:55

Я думаю, что проблема отравления сеансами была освещена довольно хорошо.

Чтобы ответить на вопрос "Когда я должен использовать это?", важно сделать шаг назад и рассмотреть, что ваше приложение делает с сеансом. Или, другими словами, это ключевой вопрос безопасности, на который вам нужно ответить

Если бы кто-то заполучил эту сессию, что бы он получил?

Если все, что вы делаете, это отслеживаете анонимные данные (пользователь заходит на сайт, и вы используете его для отслеживания их визиты), то нет особых причин для возобновления сеанса. Угонщик не получил бы ничего ценного, захватив этот сеанс.

Однако многие сайты предлагают логины. Вход в систему многое меняет. Я могу получить доступ к своему профилю. Я могу изменить настройки. Таким образом, угонщику может потребоваться доступ к моей учетной записи, особенно если все обычные пользователи и администраторы используют сеансы для управления входом в систему. Поэтому, когда люди заходят на мой сайт и входят в систему, я восстанавливаю сеанс. Это добавляет дополнительный уровень безопасности, который мой недавно вошедший в систему пользователь с меньшей вероятностью будет захвачен.

Каждый раз, когда мы добавляем важные данные в сеанс, вам следует рассмотреть возможность повторного создания идентификатора сеанса. Если вам нужно укрепить ваше приложение против фиксации, тогда может быть полезна случайная регенерация, но я бы НИКОГДА не регенерировал по каждому запросу. По умолчанию PHP хранит сеансы в файлах на локальном диске. Вы добавляете много дисковых операций ввода-вывода, чтобы уменьшить относительно небольшой вектор атаки. Если вам действительно нужно больше безопасности, я бы посоветовал пойти полный HTTPS по сравнению с регулярным восстановлением (HTTPS очень затрудняет фиксацию).

 15
Author: Machavity, 2015-12-08 19:56:51

Почему я должен использовать session_regenerate_id?

Вы должны использовать его для предотвращения фиксации сеанса.

Когда я должен использовать session_regenerate_id?

Всякий раз, когда состояние аутентификации меняется, это происходит в основном при входе и выходе из системы.

Пример

Боб сидит за общедоступным компьютером и просматривает stackoverflow.com он открывает там новую сессию. Идентификатор сеанса сохраняется в файле cookie (с флагом httpOnly для предотвращения доступа через javascript). Давайте представим, что переполнение стека всегда имело HTTPS включено, а также установлен флаг secure для файла cookie.

Как мы можем украсть сеанс сейчас?

Боб записывает идентификатор сеанса. Он выходит из компьютера, не закрыв браузер. Теперь Алиса подходит к этому компьютеру и видит, что переполнение стека уже загружено. Сейчас она входит в систему.

Теперь мы находимся на этапе, когда вы должны использовать session_regenerate_id. Если вы не создадите здесь новый идентификатор сеанса во время входа в систему, Боб может использовать предыдущий сеанс, который он записал, для доступа к сеансу Алисы и будет теперь войдите в систему как Алиса.

 11
Author: kelunik, 2017-03-25 16:15:17

Простой пример использования:

// User visits a webshop
$shopcart = new Cart();

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

// User orders items
$shopcart->add('123', 20);
$shopcart->add('124', 18);
$shopcart->add('127', 5);

Для каждого добавленного товара в моей таблице покупок делается запись. Также идентифицируется идентификатором сеанса.

// User saves cart in order to use it later
$shopcart->save();

Пользователь решил сохранить свою корзину. Теперь он привязан к его идентификатору пользователя.

// Regenerate session id for user to be able to make a new cart
session_regenerate_id();

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

 10
Author: Peter, 2015-11-13 09:07:13

Вы можете использовать его для повышения безопасности.

Таким образом, вы создаете идентификаторы сеанса для одноразового использования.

Допустим, ваш идентификатор сеанса пользователя равен =3

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

Если у вас есть код, подобный

session_start();
session_regenerate_id();

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

Теперь хакер получает идентификатор сеанса = 3

Но вы изменили сеанс после того, как он использует это, так что ваш

У пользователя есть идентификатор сеанса=4//авторизация

У хакера сессия=3//ноль

Но есть небольшой момент, скажем, вы используете метод регенерации, и ваш клиент просто заходит на веб-сайт и закрывает браузер или неактивен. У вашего клиента есть идентификатор сеанса=4, и если хакер получит файлы cookie в этой части, у них будет тот же идентификатор сеанса.

Как объяснялось выше, таким образом вы можете защитить своего клиента от обнюхивания данных одним способом, но все равно это не решит эту проблему на пользу.

Но это будет намного безопаснее, если вы используете SSL enc.

Извините за плохой английский.

 9
Author: Hasan Veli Soyalan, 2015-11-11 14:40:58

Session_regenerate_id(): Не удается восстановить идентификатор сеанса - сеанс не активен

if(session_status() == PHP_SESSION_ACTIVE)
{
    session_regenerate_id();
}
 4
Author: Anton, 2016-04-22 21:53:36