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

Существуют известные 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 в порядке.

Ответ

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

26
задан Artyom 28 December 2010 в 15:13
поделиться