2010-01-20 5 views
1

Я использовал бесплатное расширение Firefox XSS Me из Security Compass для тестирования проблем XSS. Однако, используя то, что я понимаю, чтобы быть безопасной фильтрацией, XSS меня все еще сообщает о предупреждениях. Являются ли эти точные предупреждения или ложные?XSS Me Warnings - реальные проблемы с XSS?

Используя приведенный ниже код как TestCase:

<form method="post" action=""> 
<input type="text" name="param" value="<?php echo htmlentities($_POST['param'])?>"> 
<input type="submit"> 
</form> 
<?php echo htmlentities($_POST['param'])?> 

Я бегу некоторые гадости от руки, но ни один из них не выполняются в браузере, и с помощью Charles debugging proxy я могу видеть, что ответ кодируется как ожидалось.

Однако XSS Me сообщает ряд предупреждений, как будто он может видеть Unencoded строки в источнике HTML: alt text http://img696.imageshack.us/img696/8850/xss.png

Глядя на Чарльзе в то же время, я могу видеть, что строки кодируются и должен быть безопасным, например &lt;IMG SRC=&quot;jav ascript:document.vulnerable=true;&quot;&gt;

  • Есть ли уязвимость, которую я не исправил?
  • Эти предупреждающие сообщения изгоев?
  • И если да, то другое расширение Firefox (Firebug?) Противоречит XSS Me?

ответ

5

Я работаю в Security Compass и являюсь ведущим разработчиком инструментов Exploit Me.

Вы правы, что XSS Me сообщает о предупреждении, потому что эти строки атаки кажутся (XSS Me) возвращенными с сервера полностью незакодированными. Другой синтаксический анализатор/движок JavaScript (например, IE 6/7/8, Safari или Chrome) может выполнять этот код, хотя анализатор Firefox и механизм JavaScript этого не делают.

XSS Me представляет два запроса:

  • Один запроса, где мы обнаружим эксплуатацию с использованием двигателя JavaScript браузера Firefox, который мы называем «ошибка»
  • второго запроса, где мы обнаружим эксплуатацию просто оглавлению для строки атаки на странице ответа HTML

Предупреждение, которое вы получаете, вызвано этим вторым запросом.

Я могу помочь вам добраться до первопричины этого вопроса, если вы можете сделать следующее:

  1. Использование пакетов нюхают программного обеспечения (т.е. Wireshark http://www.wireshark.org/), чтобы обнаружить строку атаки, а не Чарльз. Иногда прокси имеют способ изменения или изменения других запросов.

  2. В Firefox вы можете перейти к инструментам-> аддонам и отключить все расширения, кроме XSS Me? Таким образом, вы можете быть уверены, что никакое другое расширение не будет изменять ответ (или запрос), прежде чем он попадет в XSS Me.

  3. Открыть источник страницы ответа в Firefox, чтобы увидеть, если неперекодированный строка появляется

Если вы хотите отправить мне по электронной почте ([email protected]) с теми результатами I» Буду рад помочь понять это. Если это ошибка в XSS Me (что я, конечно, надеюсь, нет), то я могу исправить ее и получить новую сборку.

Спасибо,

Том

+0

Спасибо, мне просто нужно установить XSS Me на Firefox 3.6 - любой шанс совместимого выпуска? – PeterB

+0

Надеемся, что на этой неделе на addons.mozilla.org мы получим «экспериментальный» (читай: не просмотрен). Я отправлю ссылку, когда она закончится :-). Процесс обзора должен быть быстрым, но мы не контролируем его. – Mystic

0

Если в поле не должно быть никакого HTML-кода, вы можете попробовать что-то вроде strip_tags($strings). Он будет вырезать (большинство) HTML-тегов из строки.

Я говорю больше всего, потому что считаю, что это не идеально, и, как говорят другие люди, HTML-парсеры, вероятно, лучше всего удаляют HTML. Но в большинстве случаев это должно быть достаточно.

+0

Благодаря Chacha102. Однако, если HTML экранирован/очищен правильно, это не должно быть уязвимостью. Кодирует ли HTML-код, как показано в исходном сообщении, оставить открытые векторы атаки? – PeterB

+0

он уже делает htmlspecialchars, который намного лучше htan strip_tags, потому что он не удаляет данные, а просто делает его доступным для человека. Я бы проголосовал за тебя, если бы мог. – rook

+0

Перед тем, как спуститься, вы поняли, что он сказал? «ЕСЛИ ПОЛЕ НЕ ДОЛЖНА ПОЛУЧИТЬ ЛЮБОЙ HTML». Что с этим не так? Это идеально. Поскольку никто не назван 'Sm ith', если вы не ожидаете html-тегов в, например, в поле имени, почему бы не убить все теги в нем? – Strae

0

Я тестирую его на своем сервере и выглядит как ошибка в расширении. Я не считаю, что любое другое расширение конфликтует с расширением XSS ME.

Кстати, с htmlentities вы не охватывают все возможности, чтобы вставить XSS, так что попробуйте использовать какой-то анти XSS библиотеки :)

2

Я довольно уверен, что это ложное срабатывание. Я думаю, вы должны получить лучший инструмент тестирования xss. Acuentix имеет очень хороший и бесплатный сканер xss: http://www.acunetix.com/cross-site-scripting/scanner.htm. Wapiti и w3af - с открытым исходным кодом, а также отличные сканеры.

В PHP лучший XSS фильтр:

htmlspeicalchars($_POST['param'],ENT_QUTOES); 

Причина, почему вы должны расшифровать кавычки, потому что вы не нужны <> использовать некоторые XSS. например, это уязвимо для XSS:

print('<A HREF="http://www.xssed.com/'.htmlspecialchars($_REQUEST[xss]).'">link</a>'); 

Вам не нужно <> для выполнения JavaScript в этом случае, потому что вы можете использовать OnMouseOver, вот пример атака:

$_REQUEST[xss]='" onMouseOver="alert(/xss/)"'; 

в ENT_QUOTES заботится о двойных кавычках.

+1

действительно тривиально вставлять дополнительные атрибуты. См. Обходный лист защиты OWASP XSS http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet – Cheekysoft

+0

, даже это использование htmlspecialchars может быть уязвимым для некоторых многобайтовых атак характера – Cheekysoft

+1

Чувак, вы должны дать пример многобайтовой атаки, которую можно обойти. Я ОЧЕНЬ интересуюсь этим методом. – rook

Смежные вопросы