Разрешить пользователям публиковать BBCode или HTML с WYSIWYG? - PullRequest
3 голосов
/ 06 января 2011

Я обновлял систему страниц для участников, и одно из требований - разрешить выделение жирным шрифтом, подчеркиванием, курсивом, цветом шрифта и ссылками для определенных полей , но не размера или стиля шрифта - все это с помощью WYSIWYG редактор. Первоначально это было сделано с помощью текстовой области и некоторой минимальной фильтрации HTML, то есть удаление <script> с помощью preg_replace(). Сумасшедший и определенно небезопасный, я знаю.

Моей первой ревизией было использование TinyMCE и запрещение определенных тегов в TinyMCE. Единственная проблема заключается в том, что, очевидно, я не могу полагаться на TinyMCE, как на какой-либо вид валидатора, а защита ввода HTML от XSS, которую я обнаружил, является абсолютным минным полем. Я провел последний час или около того, читая некоторые практики, и кажется почти невозможным разрешить определенные теги / атрибуты HTML без путаницы с текущими профилями и, более того, с другими настройками, такими как размер шрифта и вещи со встроенными стилями. Например, мне нужно разрешить цвета шрифта с помощью тегов span, но разрешение атрибута style также позволит использовать любой фрагмент CSS.

Теперь я не согласен с идеей использования BBCode с редактором WYSIWYG, поскольку это позволило бы нам безопасно применить htmlspecialchars() к выводу и затем полностью контролировать любой HTML, генерируемый с помощью анализатора BBCode для [b Теги], [u], [i] и [color] с nl2br() для разрывов строк.

Единственная проблема - мне придется что-то кодировать, чтобы преобразовать текущую настройку HTML в BBCode.

Мой основной вопрос: достаточно ли вышеупомянутых шагов с BBCode для защиты от XSS-атак? Или есть более изящный / очевидный метод защиты HTML, который я могу использовать?

Ответы [ 2 ]

4 голосов
/ 06 января 2011

Вы можете использовать библиотеку HTML Purifier . Он тяжелый, но допускает правила типа «разрешать только настройки цвета в тегах стиля». Он тщательно протестирован и активно развивается.

1 голос
/ 06 января 2011

Сохранение в html и использование правильного HTML-анализатора (например, DOMDocument ), чтобы избавиться от опасных тегов (например, htmlspecialchars опасные теги, вместо этого вслепую применяются ко всем узлам контента)

...