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)** — для дополнительного уровня защиты.

### Важное замечание

Тестирование на уязвимости должно проводиться **только на собственных системах** или при наличии письменного разрешения владельца ресурса. Несанкционированное тестирование является нарушением законодательства большинства стран.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.