XSS и BB-коды

html теги

Одним из путей являются так называемые BB-коды (Bulletin Board), альтернативные теги, обычно записываемые в квадратных скобках, которые движок сайта потом при отображении заменяет на HTML-аналоги. Набор этих псевдотегов обычно очень ограничен, иногда они даже не могут иметь атрибутов. Либо набор атрибутов также сильно ограничен. Вообще, можно реализовать различные языки разметки, главное, чтобы они четко контролировались разработчиком.

Таким образом, положительным моментом BB-кодов является то, что их гораздо легче контролировать, чем HTML (который, к тому же, в разных браузерах может поддерживать разные недокументированные конструкции). Потом, один BB-код может заменяться на целую группу HTML-тегов, оформляя цитату, вставляя ссылку на картинку с предпросмотром ее данных (размера) и т. д. Недостатками BB-кодов является то, что это отдельный язык, который надо изучать пользователям сайта, который может по-разному быть реализован на разных сайтах. Ну и уже готовые HTML-тексты перед публикацией придется переводить с HTML на BB.

Но и BB-ориентированные системы могут быть подвержены XSS-атакам, если при их проектировании сделано отступление от идеи написания языка разметки с нуля. Приведу пример: пусть мы тегом [b][/b] оформляем жирный текст. И при этом разрешаем пользователям с помощью атрибута color менять его цвет. То есть пусть [b color="red"]...[/b] заменяется на <b style="color:red">...</b>. На первый взгляд все хорошо, однако...

Злоумышленник может в значение атрибута color записать что-то посложнее простого цвета, к примеру, он туда запишет строку «red" onmouseover="скрипт» или «expression(скрипт)». И, если мы не осуществляем должной фильтрации значения цвета, мы получим скрипт, выполняющийся у посетителей.

Хорошей идеей для такой фильтрации будет не вычищать потенциально опасные вещи (к примеру, слово expression или кавычки), а наоборот, пропускать только такие данные, которые являются корректными. В случае с цветом это последовательность латинских букв и цифр, возможно, с символом «#» в начале (т. е., к примеру, регулярное выражение «^[#]?[a-zA-Z0-9]+$». Есть, конечно, в стандарте HTML и другие форматы записи цветов, желающие могут справиться в интернете). Можно пойти дальше, отсеивать, к примеру, цвета, равные или близкие к цвету фона и т. д. Всем этим мы добъемся того, что наш фильтр будет правильно работать и в случае появления поддержки в браузерах каких-то конструкций, которых, возможно, еще и в проекте нет.


Источник: http://www.captcha.ru

Рекомендуем



XSS Зачастую, все-таки надо предоставить пользователю возможность как-то оформлять свои сообщения: выделять цитаты, менять шрифты, раскрашивать тексты разным цветом, вставлять картинки и таблички, как, к примеру, сделано на LiveJournal


XSS и HTML Такая фильтрация довольно сложна, ее сложность усугубляется тем, что браузеры допускают значительные вольности при написании HTML-разметки, стилей и скриптов, могут прощать отсутствующие или незакрытые кавычки, кодированные различными алгоритмами символы, лишние пробельные символы и пр


SQL-инъекции Некоторые специалисты советуют применять для этого специальные конструкторы SQL-запросов, которые сами обеспечивают требуемое разделение запроса и данных