Известны такие атаки типа Attribute XSS, как:
<DIV STYLE="width: expression(alert('XSS'));">
или
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
Все примеры которые я видел, используют функциональность выражения или url - в основном что-то вроде функции require ( "and" )".
Я думаю о следующем методе фильтрации тегов стиля, я бы проверил их, используя следующую (приблизительно) грамматику:
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, expression и т.д. Также убедитесь, что базовый синтаксис css в порядке.
Ответ
Нет, это небезопасно из-за уязвимости щелчка.