XSS-атаки и атрибуты стиля - PullRequest
       49

XSS-атаки и атрибуты стиля

25 голосов
/ 28 декабря 2010

Известны XSS-атаки на атрибуты стиля, такие как:

<DIV STYLE="width: expression(alert('XSS'));">

или

<DIV STYLE="background-image: url(javascript:alert('XSS'))">

Все примеры Я видел , использующие либо выражения, либо функции URL- в основном для чего-то подобного функция требует "(" и ")".

Я думаю о следующем методе фильтрации тегов стиля, я бы проверил их, используя следующую (приблизительно) грамматику:

identifier: [a-zA-Z_][a-zA-Z0-9\-]*
number: [0-9]+
string: '[a-zA-Z_0-9 ]*'
value : identifier | number | string | number + "(em|px)" | number +"%"
entry: identifier ":" value (\s value )*
style: (entry ;)*

Так что в основном я разрешаю свойства ASCII с числовыми значениями или очень ограниченными строковыми значениями (в основном для имен шрифтов), не позволяющие использовать что-либо, похожее на вызов.

Вопрос достаточно хорош?Существуют ли какие-либо атаки, которые могут сделать что-то подобное:

<DIV STYLE="this-is-js-property: alert 'XSS';">

И успешно?

Кто-нибудь может подумать об уязвимости XSS такого теста?

Сделатьясно, что

Мне нужны атрибуты стиля, так как многие инструменты, такие как TinyMCE, используют их, и отфильтровывание атрибутов безвредных стилей значительно повредит функциональности.может использовать @import, url, выражение и т. д. А также убедитесь, что основной синтаксис css в порядке.

Ответ

Нет, это небезопасно из-за клик-джекингауязвимость.

Ответы [ 4 ]

14 голосов
/ 28 декабря 2010

Это не работает из-за уязвимости click-jacking .

Пример:

<a href="http://example.com/attack.html" style="display: block; z-index: 100000; opacity: 0.5; position: fixed; top: 0px; left: 0; width: 1000000px; height: 100000px; background-color: red;"> </a> 

Найдено по адресу: http://www.bioinformatics.org/phplabware/forum/viewtopic.php?id=164

Код будет полностью проверен, но это может привести к серьезным повреждениям.

Итак, эмпирическое правило использует очень строгий белый список или не допускает атрибутов стиля.

3 голосов
/ 28 декабря 2010

Существует открытый фонд под названием OWASP , который поможет вам в этом.

Чтобы ответить на ваш вопрос Are there any attacks....; Да!

Там есть тонны документации, и есть библиотеки, которые вы можете использовать для корректного экранирования всего кода XSS.

Прочитайте лист предупреждения XSS .

1 голос
/ 28 декабря 2010

Правило безопасности № 1: Если вы меньше всего сомневаетесь, предположите, что есть дыра.

Чего ты пытаешься достичь? Какая функциональность вызовет CSS из ненадежного источника?

0 голосов
/ 24 ноября 2014

Да, вы можете использовать XSS-атаки с атрибутами стиля.

Эти стили были внедрены, так как мы не объявляли их в наших тегах на определенной странице JSP, но прошли через аудит нашей группы безопасности:

<img src="<path here>" style=x:ex/**/pression
(alert(54163)) ".gif"

Я думаю об использовании фильтра HTTP, чтобы остановить его здесь, но я все еще изучаю его.

У нас также не было защищенных скрытых полей ввода, и это также прошло:

<input type="hidden" name="<variable name here>" value="<value here>"  style=x:ex/**/pression(alert
(54163)) "">

С помощью такого инструмента, как Burpsuite, вы можете на лету изменять запросы, чтобы внедрить XSS в такие теги. Однако с помощью ESAPI API от OWASP вы можете добавить защиту. Мы не использовали теги JSTL, так как это был старый унаследованный код, поэтому это было лучшее краткосрочное решение.

Для скрытого ввода, который я использовал;

<input type="hidden" name="id" value="<%=ESAPI.encoder().encodeForHTMLAttribute(id)%>"

Вы также можете использовать XSS с событием загрузки js в теге img :

...