XSS без HTML-тегов

Можно ли провести XSS-атаку, если мой ввод не позволяет использовать символы ‹ и >?

Example: I enter <script>alert('this');</script> text

Но это если я удалю ‹ и > скрипт не будет текстовым:

I enter script alert('this'); script text

person VMOrtega    schedule 14.03.2014    source источник
comment
Как обрабатывается ввод пользователя? AKA, где код, который печатает это?   -  person Jon Newmuis    schedule 14.03.2014
comment
Пользовательский ввод отображается как обычный текст (не экранированный), удаляются символы ‹ и ›   -  person VMOrtega    schedule 14.03.2014
comment
На мой взгляд, XSS в кодировке UTF-7 все равно был бы возможен. Затем это зависит от контекста рендеринга текста (т.е. только внутри тегов ‹body›, или в более конкретном контексте, скажем, textarea, или внутри тега html и т. д.)   -  person cyber-guard    schedule 14.03.2014


Ответы (2)


Да, это все еще может быть возможно.

например Скажем, ваш сайт вводит пользовательский ввод в следующее место

<img src="http://example.com/img.jpg" alt="USER-INPUT" />

Если USER-INPUT равно " ONLOAD="alert('xss'), это отобразит

<img src="http://example.com/img.jpg" alt="" ONLOAD="alert('xss')" />

Угловые скобки не нужны.

Кроме того, ознакомьтесь с экспериментальными правилами минимального кодирования OWASP XSS.

Для тела HTML:

Кодировать объект HTML ‹ &

укажите кодировку в метатеге, чтобы избежать UTF7 XSS

Для тела XHTML:

Кодировка объекта HTML ‹ & ›

ограничить ввод кодировкой http://www.w3.org/TR/2008/REC-xml-20081126/#charsets

Таким образом, в теле вы можете обойтись только кодированием (или удалением) подмножества символов, обычно рекомендуемых для предотвращения XSS. Однако вы не можете сделать это внутри атрибутов — полный XSS (межсайтовый скриптинг) ) Шпаргалка по профилактике рекомендует следующее, и у них нет минимальной альтернативы:

За исключением буквенно-цифровых символов, экранируйте все символы в формате HTML Entity &#xHH;, включая пробелы. (ЧЧ = шестнадцатеричное значение)

В основном это касается трех типов способов указания значения атрибута:

  • Без кавычек
  • Одиночные кавычки
  • Двойные кавычки

Кодирование таким образом предотвратит XSS в значениях атрибутов во всех трех случаях.

Также имейте в виду, что для атак UTF-7 не требуются символы угловых скобок. Однако, если кодировка явно не установлена ​​в UTF-7, этот тип атаки невозможен в современных браузерах .

+ADw-script+AD4-alert(document.location)+ADw-/script+AD4-

Также остерегайтесь атрибутов, которые разрешают URL-адреса, такие как href, и гарантируют, что любой ввод пользователя является допустимым веб-URL. Настоятельно рекомендуется использовать надежную библиотеку для проверки URL-адреса с использованием подхода с использованием списка разрешений (например, если протокол не HTTPS, отклонить его). Попытка заблокировать такие последовательности, как javascript:, недостаточна.

person SilverlightFox    schedule 15.03.2014

Если пользовательский ввод печатается внутри HTML-атрибута, вам также необходимо избегать кавычек, иначе вы будете уязвимы, например:

" onload="javascript-code" foobar="

Вы также должны избегать символа амперсанда, так как он обычно должен быть закодирован внутри документов HTML и в противном случае может разрушить ваш макет.

Поэтому вам следует позаботиться о следующих символах: ‹ > & ' "

Однако вы не должны полностью удалять их, а заменять их правильными HTML-кодами, т.е. '

person wonce    schedule 14.03.2014