Почему и когда мне следует использовать эту session_regenerate_id()
функцию в php? Должен ли я всегда использовать его после использования session_start()
? Я читал, что мне нужно использовать его, чтобы предотвратить фиксацию сеанса, это единственная причина?
php
session
session-fixation
рвандони
источник
источник
Ответы:
Что есть
session_regenerate_id()
?Как сказано в названии функции, это функция, которая заменяет текущий идентификатор сеанса новым и сохраняет информацию о текущем сеансе.
Что оно делает?
В основном это помогает предотвратить атаки фиксации сеанса. Атаки фиксации сеанса - это когда злоумышленник пытается использовать уязвимость в системе, чтобы зафиксировать (установить) идентификатор сеанса (SID) другого пользователя. Таким образом они получат полный доступ в качестве исходного пользователя и смогут выполнять задачи, которые в противном случае потребовали бы аутентификации.
Чтобы предотвратить такие атаки, назначьте пользователю новый идентификатор сеанса, который будет использоваться
session_regenerate_id()
при успешном входе в систему (или для каждого X-запроса). Теперь только у него есть идентификатор сеанса, а ваш старый (зафиксированный) идентификатор сеанса больше не действителен.Когда я должен использовать
session_regenerate_id()
?Как указывает Symbecean в комментариях ниже, идентификатор сеанса должен быть изменен при любом переходе в состояние аутентификации и только при переходах аутентификации.
Дальнейшее чтение:
источник
Вы должны использовать
session_regenerate_id()
для того , чтобы остановить угон сессий и фиксацию сеанса .Из этого Security.SE ответ :
С этой веб-страницы :
Когда использовать
Когда пользователь редактирует / обновляет некоторые важные данные (изменение паролей, учетных данных, забытые пароли и т. Д.), Что может поставить под угрозу безопасность сайта или политику конфиденциальности.
Смотрите также:
Руководство по безопасности PHP: сеансы
Фиксация сеанса (Хорошее чтение)
источник
Думаю, проблема отравления сеансов освещена достаточно хорошо.
Чтобы ответить на вопрос "Когда мне это использовать?" Часть, важно сделать шаг назад и подумать, что ваше приложение делает с сеансом. Или, говоря другими словами, это ключевой секретный вопрос, на который нужно ответить.
Если все, что вы делаете, это отслеживание анонимных данных (пользователь приходит на сайт, и вы используете его для отслеживания их посещений), то нет особых причин для повторного создания сеанса. Угонщик не получит ничего ценного, захватив этот сеанс.
Однако многие сайты предлагают логины. Логин меняет многое. Я могу получить доступ к своему профилю. Я могу изменить настройки. Таким образом, злоумышленнику может потребоваться доступ к моей учетной записи, особенно если обычные пользователи и администраторы используют сеансы для управления входом в систему. Поэтому, когда люди приходят на мой сайт и входят в систему, я восстанавливаю сеанс. Это добавляет дополнительный уровень безопасности, что снижает вероятность взлома моего недавно вошедшего в систему пользователя.
Каждый раз, когда мы добавляем важные данные в сеанс, вам следует подумать о восстановлении идентификатора сеанса. Если вам нужно обезопасить свое приложение от фиксации, может быть полезна случайная регенерация, но я НИКОГДА не буду регенерировать при каждом запросе. По умолчанию PHP хранит сеансы в файлах на локальном диске. Вы добавляете много дискового ввода-вывода, чтобы смягчить относительно небольшой вектор атаки. Если вам действительно нужна большая безопасность, я бы рекомендовал использовать полный HTTPS вместо регулярной регенерации (HTTPS очень затрудняет фиксацию).
источник
Почему я должен использовать
session_regenerate_id
?Вы должны использовать его, чтобы предотвратить фиксацию сеанса .
Когда я должен использовать
session_regenerate_id
?Всякий раз, когда состояние аутентификации изменяется, это в основном происходит при входе в систему и выходе из системы.
пример
Боб сидит за общедоступным компьютером и, просматривая stackoverflow.com, открывает там новый сеанс. Идентификатор сеанса сохраняется в файле cookie (с
httpOnly
флагом для предотвращения доступа через javascript). Представим, что в Stack Overflow всегда включен HTTPS, а также установленsecure
флаг для файла cookie.Как теперь украсть сеанс?
Боб записывает идентификатор сеанса. Он уходит из компьютера, не закрывая браузер. Теперь Алиса подходит к этому компьютеру и видит, что Stack Overflow уже загружен. Она сейчас входит в систему.
Теперь мы находимся на этапе, когда вам следует использовать
session_regenerate_id
. Если вы не создадите здесь новый идентификатор сеанса во время входа в систему, Боб мог бы использовать предыдущий сеанс, который он записал, для доступа к сеансу Алисы, и теперь он войдет в систему как Алиса.источник
session_regenerate_id()
выдадут, Алиса сможет получить доступ к учетной записи bobs? это правильно?Вы можете использовать его для большей безопасности.
Таким образом вы создаете идентификаторы сеанса для одноразового использования.
Допустим, ваш идентификатор сеанса пользователя = 3
Какой-то хакер взломал ваш клиент и получил его session_id. Таким образом, хакер может использовать этот файл cookie для использования своего сеанса.
Если у вас есть код вроде
вы можете менять их сеанс каждый раз, когда они используют ваш сайт.
Теперь хакер получает sessionid = 3
но вы изменили сеанс после того, как он его использовал, поэтому ваш
у пользователя есть sessionid = 4 // авторизация
у хакера есть сессия = 3 // null
Но есть небольшой момент, допустим, вы используете метод регенерации, а ваш клиент просто входит на веб-сайт и закрывает браузер или неактивен. У вашего клиента sessionid = 4, и если хакер получит файлы cookie в этой части, у них будет тот же sessionid.
Как объяснялось выше, таким образом вы можете защитить своего клиента от перехвата данных одним способом, но все же это не решит эту проблему навсегда.
Но это будет намного безопаснее, если вы используете SSL enc.
Простите за плохой английский.
источник
Простой вариант использования:
Запускается сеанс, и в базу данных делается запись. Тележка пользователя идентифицируется по его идентификатору сеанса.
Для каждого добавленного продукта делается запись в моей таблице товарной тележки. Также идентифицируется по идентификатору сеанса.
Пользователь решил сохранить свою корзину. Теперь он привязан к его идентификатору пользователя.
Идентификатор сеанса регенерируется, и теперь пользователь может заново создать другую тележку.
источник
источник