1. Введение
Фиксация сеанса — это метод, позволяющий хакерам перехватить сеанс пользователя. Этот метод использует тот факт, что сервер не меняет значение идентификатора сеанса каждый раз, когда пользователь входит в систему, а вместо этого использует уже существующий идентификатор сеанса. Процесс атаки включает в себя получение действующего идентификатора сеанса (возможно, путем доступа к веб-сайту ), затем поиск способа входа жертвы на веб-сайт с этим идентификатором сеанса и, наконец, когда жертва успешно войдет в систему, хакер будет просматривать сайт со своей учетной записью. Конкретный сценарий выглядит следующим образом:
Мэллори находит веб-сайт, например http://unsafe.example.com, который принимает любой идентификатор сеанса из запроса без аутентификации.
Мэллори отправит Алисе электронное письмо со ссылкой http://unsafe.example.com/?SID=1234.
Алиса заходит на http://unsafe.example.com/?SID=1234. Затем войдите на сайт.
Мэллори просто заходит на http://unsafe.example.com/?SID=1234 и использует сайт под учетной записью Алисы.
Мэллори может использовать следующие методы для установки файлов cookie для Алисы:
Приложите скрипт для установки файлов cookie
Отправить пакет ответа HTTP со значением файла cookie MalloryОтправить пакет ответа HTTP со значением файла cookie Mallory
Используйте метатеги HTML:
2. Примеры
Пример 1. Скрипты на стороне клиента
Однако аналогично сценарию, упомянутому выше, в этом случае идентификатор сеанса передается не в URL-адресе, а в файле cookie. Чтобы отредактировать значение идентификатора сеанса в файле cookie жертвы, хакер вставит фрагмент Javascript:
http://website.kom/document.cookie=”sessionid=abcd”;
Пример 2 – тег
Аналогично сценарию на стороне клиента, но на этот раз хакер вставит дополнительные теги:
http://сайт.кон/
Пример 3 – ответ заголовка HTTP
Вставку идентификатора сеанса также можно выполнить путем перехвата пакетов, которыми обмениваются клиент и веб-приложение, а затем вставки поля Set-Cookie в заголовок.
3. Как предотвратить
Причина этой ошибки заключается в том, что сервер не восстанавливает идентификатор сеанса после каждого успешного входа в систему. Поэтому исправить эту ошибку несложно, нам просто нужно изменить значение Session ID и всё. В PHP мы используем функцию session_regenerate_id() для регенерации сеанса.