Лучшая практика: пользовательская очистка HTML

Я кодирую ширину редактора 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 ().

После кодирования специальных символов можно предотвратить межсайтовый скриптинг.