#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 /…