мой идентификатор сессии генерируется до входа в систему? - PullRequest
4 голосов
/ 12 мая 2011

Я прочитал об уязвимости сеанса в руководстве по php и столкнулся с этой проблемой: мне нужен мой сервер / код для генерации идентификатора сеанса ПОСЛЕ успешной аутентификации пользователя.

Теперь я не уверен, когда phpустанавливает идентификатор сессииМое php-приложение похоже на MVC, и все проходит через index.php, и в верхней части index.php у меня есть session.start (), поскольку каждая страница (после входа в систему) использует сессии.

Эториск уязвимости?Или я должен сказать это так: означает ли это, что при первом входе на мой сайт, даже до входа в систему, сервер устанавливает идентификатор сеанса для этого пользователя?Устанавливает ли session.start () идентификатор пользователя или идентификатор сессии не генерируется, пока я не установлю свою первую переменную сеанса, т.е.пока я не выполню $ _SESSION ['foo'] = 'bar'?

Если сессия фактически генерируется уже на session.start (), я думаю, хорошей идеей было бы восстановить идентификатор сессии после аутентификациив таком случае это решит проблему?

Ответы [ 3 ]

4 голосов
/ 12 мая 2011

Идентификатор сеанса генерируется при запуске session_start().

Рекомендуется обновить идентификатор сеанса при входе в систему с помощью session_regenerate_id().

4 голосов
/ 12 мая 2011

PHP генерирует новый идентификатор сеанса, когда вызывается session_start, и действительный идентификатор сеанса не был передан. Так что в вашем случае пользователь уже получит идентификатор сеанса при посещении страницы формы входа.

В целом это не уязвимость системы безопасности, но может быть, если ваше приложение уязвимо для фиксации сеанса . Чтобы избежать этого, есть некоторые контрмеры . Наиболее важным в отношении аутентификации является создание нового идентификатора сеанса и аннулирование старого. Вы можете сделать это, вызвав session_regenerate_id перед сохранением информации о пользователе в сеансе:

if ($userIsAuthentic) {
    session_regenerate_id(true);
    $_SESSION['user-id'] = 12345;
    /* … */
}
1 голос
/ 12 мая 2011

Или я должен сказать это так: означает ли это, что при первом входе на мой сайт, даже до входа в систему, сервер устанавливает идентификатор сеанса для этого пользователя?

Да, это так.

Полагаю, хорошей идеей было бы восстановить идентификатор сеанса после проверки подлинности, решает ли это в этом случае проблему?

Вы правы.

Устанавливает ли session.start () идентификатор пользователя или идентификатор сессии не генерируется, пока я не установлю свою первую переменную сеанса ...

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

...