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