Session Hijacking — это метод атаки, при котором злоумышленник получает контроль над активной пользовательской сессией, не зная логин и пароль. Атака основывается на перехвате идентификатора сессии (Session ID), который используется приложением для идентификации пользователя после аутентификации.
Сессия в веб-приложениях — это временное состояние, хранящее информацию о пользователе после входа. Она идентифицируется с помощью уникального токена, который передаётся вместе с каждым запросом, чаще всего через HTTP cookie, URL-параметры или заголовки.
Как происходит перехват
Злоумышленник получает Session ID одним из способов:
- Через открытую Wi-Fi-сеть, анализируя незашифрованный трафик;
- С помощью XSS-атаки, если сайт позволяет внедрять сторонний JavaScript;
- Через DNS-спуфинг или подмену IP-маршрутов;
- При отсутствии HTTPS, что даёт возможность прослушивать HTTP-запросы;
- Путём кражи токена через вредоносные расширения, iframe или промежуточные прокси.
После получения токена атакующий использует его в своём браузере или HTTP-клиенте и получает доступ к чужой сессии как полноправный пользователь.
Почему это опасно
- Нет необходимости в пароле — только действующий Session ID;
- Захват возможен до выхода пользователя (т.е. пока сессия активна);
- Доступ к любым действиям в рамках сессии — личный кабинет, переписка, оплата;
- Трудно обнаружить — в логах атака выглядит как обычный запрос пользователя.
Примеры угроз
- Пользователь авторизуется на сайте через незащищённое соединение в кафе. Нападающий с помощью сниффера перехватывает session cookie и использует его для входа в аккаунт.
- Сайт уязвим к XSS, и вредоносный скрипт считывает токен из , отправляя его на сервер атакующего.
document.cookie
- В API токен передаётся в URL (), и он попадает в логи прокси или браузера.
GET /api?token=abc123
Как защититься
- Использовать HTTPS на всех этапах — включая login, редиректы, API-запросы;
- Устанавливать флаг HttpOnly на cookie, чтобы исключить доступ из JavaScript;
- Активировать флаг Secure для передачи cookie только по HTTPS;
- Привязывать сессии к IP-адресу или user-agent (с осторожностью, учитывая NAT и мобильные сети);
- Применять временные токены и короткий TTL на сессии;
- Реализовать механизм ручного выхода и автоистечения;
- Использовать дополнительную аутентификацию при критических действиях (например, при смене пароля).
Session Hijacking — это серьёзная угроза для любых веб-приложений, особенно если безопасность построена на простом токене без привязки к окружению. При правильной защите можно свести риск к минимуму, но при игнорировании базовых практик — атака остаётся незаметной и разрушительной.