Защищен ли PHP от уязвимостей «Разделения ответа HTTP»?

#php #security #http-headers #exploit

#php #Безопасность #http-заголовки #эксплойт

Вопрос:

 <?php
setcookie('test', "testrn<script>alert(1)</script>");
echo 1;
  

Но оказывается, что PHP автоматически выполняет кодирование:

 Set-Cookie: test=test%0D%0A%3Cscript%3Ealert%281%29%3C%2Fscript%3E
  

Означает ли это, что невозможно воспроизвести разделение HTTP-ответа в PHP?

Комментарии:

1. Даже устаревшие версии php фильтруют все вызовы header и setcookie. И почему бы вам просто не вывести тег script с помощью echo вместо этого?

2. @марио, пожалуйста, перейдите по ссылке, которую я предоставил выше.

3. Так что насчет этого? Это не объясняет цель вашего вопроса. В противном случае ответ прост: да, не воспроизводится в текущих версиях php. В статье википедии этому посвящен целый абзац.

4. @mario, все разделение http-ответа выполняется в заголовке , в то время как echo выводятся данные только в теле

5. Если это возможно, можно изменить кодировку строки. (т. е. смешать UTF-7 и UTF-8)

Ответ №1:

Из связанной статьи в Википедии:

[…] Хотя разделение ответов не является специфичным для PHP, интерпретатор PHP содержит защиту от атаки начиная с версий 4.4.2 и 5.1.2. [1]

header и setcookie содержат меры по предотвращению разделения ответа / заголовка. Это невозможно.

Комментарии:

1. Возможно ли отключить защиту?

2. @mario откуда ты знаешь, что setcookie защищен? Я не могу найти никаких ссылок на setcookie и разделение ответов

3. @charlieb просто пересылает свои конструкции в header() в основном: github.com/php/php-src/blob /…