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 атак.

31 марта 2011