Игнорирование базового тега после записи - PullRequest
5 голосов
/ 24 февраля 2012

В Chrome я получаю сообщение об ошибке Refused to execute a JavaScript script. Source code of script found within request. после публикации данных, содержащих имя домена (также обратите внимание на отсутствие javascript на обеих страницах).

badpage1.html :

<form action="/badpage2.html" method="post">
<input type="hidden" name="name" value="href=%22http://www.w3.org/%22"/>
<input type="submit" name="submit"/>
</form>

badpage2.html :

<!DOCTYPE html>
<html>
    <head>
        <base href="http://www.w3.org/"/>
    </head>
    <body>
        <img src="Icons/w3c_home" alt="">
    </body>
</html>

Если перейти непосредственно к badpage2.html, изображение будет отображаться, но если перейти к нему черезbadpage1.html, изображение не будет отображаться (базовый тег не работает).

Это ошибка в обнаружении Chrome XSS?И если это не так, как бы я обойти это?Кажется глупым кодировать опубликованные данные только для того, чтобы обойти этот фильтр.

РЕДАКТИРОВАТЬ:

В моем случае отправленное значение сообщения должно обновить часть содержимого страницы.Проблема возникает, если оно содержит доменное имя, которое используется в <base> (как в этом примере), запускает обнаружение XSS, которое отключает тег <base>.

1 Ответ

3 голосов
/ 02 марта 2012

Я обнаружил, что могу отправить пользовательский заголовок HTTP X-XSS-Protection на странице, которая запуталась из-за защиты.

Я использую приведенный ниже код для своего PHPрешение:

header( "X-XSS-Protection: 0" );
...