У меня обычная ситуация, когда пользовательский ввод использует подмножество HTML (ввод с помощью tinyMCE). Мне нужна некоторая защита на стороне сервера от XSS-атак, и я ищу хорошо протестированный инструмент, который люди используют для этого. Что касается PHP, я вижу множество библиотек, таких как HTMLPurifier, которые выполняют эту работу, но я не могу ничего найти в .NET.
Я в основном ищу библиотеку, чтобы отфильтровать до белого списка тегов, атрибутов этих тегов и правильно поступать с «сложными» атрибутами, такими как a: href и img: src
Я видел сообщение Джеффа Этвуда по адресу http://refactormycode.com/codes/333-sanitize-html, но я не знаю, насколько он актуален. Имеет ли это какое-либо отношение к тому, что сайт в настоящее время использует? И в любом случае я не уверен, что меня устраивает эта стратегия попытки регулярного выражения действительного ввода.
В этом сообщении в блоге излагается то, что кажется гораздо более убедительной стратегией:
Этот метод состоит в том, чтобы фактически проанализировать HTML в DOM, проверить это, а затем восстановить из него действительный HTML. Если синтаксический анализ HTML может разумно обрабатывать искаженный HTML, тогда отлично. Если нет, ничего страшного - я могу потребовать хорошо сформированный HTML, поскольку пользователи должны использовать редактор tinyMCE. В любом случае я переписываю то, что я знаю, является безопасным, правильно сформированным HTML.
Проблема в том, что это просто описание без ссылки на какую-либо библиотеку, которая действительно выполняет этот алгоритм.
Такая библиотека существует? Если нет, то каким был бы хороший механизм синтаксического анализа .NET HTML? И какие регулярные выражения следует использовать для дополнительной проверки a: href, img: src? Я упустил здесь что-то еще важное?
Я не хочу переделывать здесь глючное колесо. Конечно, есть несколько часто используемых библиотек. Любые идеи?