Подтвердить что ты не робот

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

Известны такие атаки типа 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 в порядке.

Ответ

Нет, это небезопасно из-за уязвимости щелчка.

4b9b3361

Ответ 1

Это не работает из-за уязвимости 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

Код будет полностью проверен, но может нанести серьезный ущерб.

Итак - правило большого пальца использует очень строгий белый список или не позволяет атрибуты стиля.

Ответ 2

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

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

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

Прочтите лист предотвращения XSS.

Ответ 3

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

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

Ответ 4

Да, вы можете использовать атаки 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 onload в теге img: