Как HTML-теги могут быть экранированы только в коде, а некоторые теги не экранированы?

0

При использовании некоторых текстовых текстовых редакторов (например, текстового редактора на Stack Overflow) мы видим, что некоторые теги, такие как <b>, <i> и т.д., Разрешены, и в определенных разделах кода все теги HTML экранированы.

Как это возможно? Я попробовал это с помощью jQuery, и я думаю, что они используют регулярные выражения, но у меня нет большого опыта использования регулярных выражений.

Мне удалось сделать такие вещи через jQuery AJAX и PHP-скрипты, в которых результат (который экранирован с использованием htmlspecialchars() за исключением определенных допустимых тегов) показан с помощью функции jQuery .html(). Однако я обнаружил, что он уязвим для атаки XSS. Я также пытался использовать .text(), но он избегает всех тегов, включая теги, которые я пытался не убежать, и загрузка AJAX также требует времени.

Как я должен заниматься этим?

  • 0
    github.com/benweet/stackedit
  • 3
    Похоже, что этот вопрос не по теме, поскольку он касается переполнения стека, но на самом деле он является тематическим, поскольку речь идет о технике программирования, которая просто используется для переполнения стека.
Показать ещё 3 комментария

1 ответ

0

Вы можете использовать tinymce в качестве своего редактора и инициализировать его в текстовой области, и после его инициализации вы можете использовать

tinyMCE.init({
    selector: "textarea",
    valid_children : "+body[style],-body[div],p[strong|a|#text]"
});

Делая это, вы разрешаете редактору использовать только определенные теги html-тегов, которые будут экранированы.

Valid_children позволяет вам контролировать, какие дочерние элементы могут существовать в пределах каких родительских элементов. TinyMCE по умолчанию удаляет/разделяет любое непереходное содержимое HTML. Так, например, P не может быть дочерним элементом другого элемента P.

Синтаксис этой опции представляет собой список родителей, разделенных запятыми, с элементами, которые должны быть добавлены/удалены как допустимые дочерние элементы для этого элемента. Например, "+body [style]" добавит стиль как действительный дочерний элемент тела.

Надеюсь, что это поможет вам

  • 0
    Это хорошее начало, но оно не выполняет никакой фильтрации на стороне сервера; таким образом, злоумышленник может внедрить любой HTML-код, который он хочет.
  • 0
    Он никогда не выполнит проверку на стороне сервера, потому что это плагин jquery для редактора wysiwyg, который запускает внешний интерфейс не на стороне сервера. Для серверной части вы должны написать собственное регулярное выражение для удаления этих тегов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню