Я кодирую ширину WYSIWYG-редактора designMode = "на" на iframe. Редактор хорошо работает, и я храню код, как находится в базе данных.
Перед выводом HTML я должен "убрать" с php на серверной стороне для предотвращения перекрестных сценариев сайта и других страшных вещей. Есть ли своего рода лучшая практика о том, как сделать это? Какие теги могут быть опасными?
ОБНОВЛЕНИЕ: Опечатка зафиксировала, это "Что видишь, то и получишь". Ничто нового :)
Лучшая практика - разрешать только определенные вещи, которые, как вы знаете, не опасны, а все остальное удалять/удалять. См. статью Автоматизированное обнаружение и удаление вредоносного кода в Интернете (OWASP AntiSamy), где это обсуждается (библиотека написана на Java, но принципы применимы к любому языку).
Если вы действительно хотите разрешить это, вам следует использовать метод белого списка.
Вероятно, лучший подход - запретить HTML и использовать вместо него упрощенный формат разметки; вы можете предварительно выполнить рендеринг в HTML и сохранить его в базе данных, если производительность вызывает беспокойство. Избежание подобных проблем - одна из главных причин использования Markdown , Textile , reStructuredText и т. Д.
ПРИМЕЧАНИЕ : я связался с Markdown со вкусом GitHub (GFM), а не Standard Markdown (SM). GFM решает некоторые общие проблемы, с которыми конечные пользователи сталкиваются с SM.
Если вы знакомы с ASP .NET, просто выполните Server.htmlencode (), чтобы преобразовать специальные символы, такие как <> в "& g t;" "& l t;"
В php вы можете использовать функции htmlspecialchars ().
После того, как специальные символы закодированы, межсайтовый скриптинг можно предотвратить.
Недавно я рассматривал тот же вопрос с Perl в качестве серверного языка.
При этом я столкнулся с HTML Purifier, который может быть тем, что вы хотите. Но очевидно, поскольку он на PHP, а не на Perl, я на самом деле не тестирует его.
Кроме того, в своем исследовании я пришел к выводу, что это очень сложный бизнес и рассматриваю, если это возможно, использование упрощенного языка разметки, такого как Markdown, как предложил Хэнк Гей.