В настоящее время я читаю руководство , и я немного смущен этим:
Чтобы устранить эту слабость, она помогает понять масштаб проблемы. Фиксация сеанса – всего лишь шаг за шагом. Цель атаки – получить идентификатор сеанса, который может использоваться для захвата сеанса. Это наиболее полезно, когда захваченный сеанс имеет более высокий уровень привилегий, чем злоумышленник может получить с помощью законных средств. Этот уровень привилегий может быть таким же простым, как и вход в систему. Если идентификатор сеанса восстанавливается каждый раз, когда происходит изменение уровня привилегий, риск фиксации сеанса практически устраняется:
<?php $_SESSION['logged_in'] = FALSE; if (check_login()) { session_regenerate_id(); $_SESSION['logged_in'] = TRUE; } ?>
Если я это правильно понимаю, мне нужно только создать session_regenerate_id()
прежде чем назначить значение, например logged_in = true
или user_id = id
а затем я сделал защиту от фиксации сеанса?
Этого достаточно? Что еще я могу сделать?
На самом деле наиболее распространенным сценарием с фиксацией сеанса является то, что злоумышленник разместит ссылку, например, на вашей домашней странице или странице входа, установив идентификатор сеанса на url (как переменную GET) и дождаться, когда некоторые пользователи войдут в систему. Так как злоумышленник знает идентификатор сеанса этих пользователей, и поскольку этот идентификатор сеанса может быть установлен в URL-адресе, злоумышленник может пересмотреть ссылку на страницу профиля / панели мониторинга зарегистрированного пользователя и выдать себя за этого пользователя.
Таким образом, для предотвращения таких видов атак регенерация идентификатора сеанса является достаточной, так как злоумышленник остается с неаутентифицированным сеансом. Дополнительный шаг, который вы можете предпринять, – не принимать идентификаторы сеанса в URL-адресе. Для этого вам необходимо установить (либо в php.ini, если у вас есть доступ к этому файлу на сервере или через ini_set):
Таким образом, злоумышленник даже не может установить идентификатор сеанса даже для сеанса без проверки подлинности.
Нет. Фиксация сеанса использует слабость, которую злоумышленник может навязать действительному идентификатору сеанса для жертвы, в результате чего этот идентификатор сеанса используется для идентификации сеанса жертвы.
Восстановление идентификатора сеанса после успешной проверки подлинности, по меньшей мере, снижает вероятность того, что злоумышленник может использовать сеанс аутентификации жертвы. Но это не предотвращает использование сеанса жертвы (не прошедшей проверку) вообще.
Вот почему вы должны разрешать только идентификаторы сеансов через файлы cookie (см. Session.use_cookies_only ). Поскольку обычно злоумышленник не может перезаписывать файлы cookie жертвы (кроме других атак, таких как XSS или принудительное форматирование файлов cookie ).
Ты прав. Пока вы меняете идентификатор сеанса при обновлении пользовательских привилегий, вы защищены от фиксации сеанса.
Фиксация сеанса работает, устанавливая идентификатор сеанса жертвы на некоторый идентификатор, который знает злоумышленник. Затем злоумышленник ждет, когда пользователь войдет в систему. Если идентификатор сеанса не изменяется, на данный момент злоумышленник имеет доступ к учетной записи пользователя (у него есть идентификатор сеанса). Если идентификатор сеанса изменяется, атака неэффективна.