PHP Header Injection тест: curl -I «http://site.com/auth.php?url=http://evil.comSet-Cookie:…»
## PHP Header Injection: тестирование с помощью curl
Header Injection (внедрение заголовков HTTP) — это уязвимость, при которой злоумышленник может внедрить произвольные HTTP-заголовки в ответ сервера, манипулируя входными данными, которые впоследствии используются в функциях типа `header()` в PHP.
### Как работает атака
В PHP функция `header()` используется для отправки HTTP-заголовков. Если приложение передаёт пользовательский ввод напрямую в эту функцию без валидации, атакующий может вставить символы `%0d%0a` (CRLF — Carriage Return + Line Feed, то есть `rn`), которые в HTTP-протоколе служат разделителями заголовков.
Пример уязвимого кода:
php
$url = $_GET[‘url’];
header(«Location: » . $url);
Запрос для тестирования:
curl -I «http://site.com/auth.php?url=http://evil.com%0d%0aSet-Cookie:%20session=hijacked»
В этом запросе `%0d%0a` декодируется в `rn`, что позволяет добавить новый заголовок `Set-Cookie` в ответ сервера. Это открывает возможности для:
— **Session Fixation** — фиксации идентификатора сессии;
— **Cookie Injection** — установки произвольных куки;
— **HTTP Response Splitting** — разделения HTTP-ответа для подмены контента;
— **Cache Poisoning** — отравления кэша прокси-серверов.
### Как провести тест
1. Флаг `-I` в curl отправляет HEAD-запрос и выводит только заголовки ответа.
2. Анализируйте ответ: если в заголовках появился `Set-Cookie` с вашим значением — уязвимость подтверждена.
3. Также можно использовать Burp Suite или OWASP ZAP для визуального анализа.
### Защита от Header Injection в PHP
1. **Валидация входных данных** — проверяйте URL через `filter_var($url, FILTER_VALIDATE_URL)`.
2. **Удаление CRLF-символов** — используйте `str_replace([‘r’, ‘n’], », $input)`.
3. **Использование `htmlspecialchars()`** — для экранирования спецсимволов.
4. **Обновление PHP** — начиная с PHP 7.4, функция `header()` автоматически блокирует многострочные значения.
5. **WAF (Web Application Firewall)** — для дополнительного уровня защиты.
### Важное замечание
Тестирование на уязвимости должно проводиться **только на собственных системах** или при наличии письменного разрешения владельца ресурса. Несанкционированное тестирование является нарушением законодательства большинства стран.
