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