Я обновлял систему страниц для участников, и одно из требований - разрешить выделение жирным шрифтом, подчеркиванием, курсивом, цветом шрифта и ссылками для определенных полей , но не размера или стиля шрифта - все это с помощью 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, который я могу использовать?