MarkHtml
Опубликовал код PHP библиотеки MarkHtml для фильтрации HTML кода от XSS вставок.
Принцип действия заключается в том, что убирается только потенциально опасный код, разрешая использовать весь остальной. Опасным считается код, позволяющий вставить и выполнить JavaScript. На данный момент защищает от следующего:
- тег
<script></script>
- атрибуты, содержащие
"javascript:"
- атрибуты, чьё имя начинается
on
- атрибуты
style
, содержащие открывающую скобку"("
- атрибут
src
, содержащий"mhtml:"
В итоге можно безопасно для сайта вставлять совершенно любой код. Закрывает незакрытые теги, убирает лишние закрывающие теги, от безответственных действий пользователей сайта, его верстка не развалится.
Для защиты от перехвата cookie
с помощью flash
, не рекомендуется давать возможность пользователям загружать .swf
файлы на тот же домен, где располагается сайт.
Может работать совместно с Markdown и типографом.
Код основан на замечательной библиотеке html_filter, которая работает по принципу "белых" списков тегов и атрибутов.
MarkHtml на Google Code: http://code.google.com/p/markhtml/
Для чего это требуется
Обычно везде запрещают использовать HTML код, а чтобы пользователи могли хоть как-то форматировать код и вставлять ссылки, изображения, видео, делают даже иногда специальные теги, которые потом превращаются в безопасный HTML код.
При этом не удается дать пользователю достаточную свободу, ведь может потребоваться вставить какой угодно код. Например, сейчас Youtube предлагает вставлять <iframe>
, вместо <object>
для вставки видео, большинство форумов вряд-ли пропустят новый формат. В будущем будут уже предлагать вставить HTML5 код с использованием тега <video>
.
Правда в данный момент я решил по-умолчанию отключить возможность использовать <iframe>
, слишком он много проблем может принести сайтам, которые позволяют его вставлять любому желающему.
Единственный минус сейчас, это невозможность использования фоновых картинок во внедренных в теги стилях. Но это меньшее зло, по сравнению с тем, что пользователи с браузером Internet Explorer становятся уязвимыми для XSS атак.