При использовании некоторых текстовых текстовых редакторов (например, текстового редактора на Stack Overflow) мы видим, что некоторые теги, такие как <b>
, <i>
и т.д., Разрешены, и в определенных разделах кода все теги HTML экранированы.
Как это возможно? Я попробовал это с помощью jQuery, и я думаю, что они используют регулярные выражения, но у меня нет большого опыта использования регулярных выражений.
Мне удалось сделать такие вещи через jQuery AJAX и PHP-скрипты, в которых результат (который экранирован с использованием htmlspecialchars()
за исключением определенных допустимых тегов) показан с помощью функции jQuery .html()
. Однако я обнаружил, что он уязвим для атаки XSS. Я также пытался использовать .text()
, но он избегает всех тегов, включая теги, которые я пытался не убежать, и загрузка AJAX также требует времени.
Как я должен заниматься этим?
Вы можете использовать tinymce в качестве своего редактора и инициализировать его в текстовой области, и после его инициализации вы можете использовать
tinyMCE.init({
selector: "textarea",
valid_children : "+body[style],-body[div],p[strong|a|#text]"
});
Делая это, вы разрешаете редактору использовать только определенные теги html-тегов, которые будут экранированы.
Valid_children позволяет вам контролировать, какие дочерние элементы могут существовать в пределах каких родительских элементов. TinyMCE по умолчанию удаляет/разделяет любое непереходное содержимое HTML. Так, например, P не может быть дочерним элементом другого элемента P.
Синтаксис этой опции представляет собой список родителей, разделенных запятыми, с элементами, которые должны быть добавлены/удалены как допустимые дочерние элементы для этого элемента. Например, "+body [style]" добавит стиль как действительный дочерний элемент тела.
Надеюсь, что это поможет вам