У меня распространенная ситуация, когда у меня есть пользовательский ввод, который использует подмножество HTML (ввод с помощью tinyMCE). Мне нужна некоторая защита на стороне сервера от атак XSS, и я ищу хорошо протестированный инструмент, который люди используют для этого. Со стороны PHP я вижу множество библиотек, таких как HTMLPurifier, которые выполняют эту работу, но я не могу найти ничего в .NET.
Я в основном ищу библиотеку для фильтрации до белого списка тегов, атрибутов этих тегов и правильно работает со «сложными» атрибутами, такими как: href и img: src
Я видел пост Джеффа Этвуда в http://refactormycode.com/codes/333-sanitize-html,, но я не знаю, насколько он актуален. Имеет ли это какое-либо отношение к тому, что сайт использует в настоящее время? И в любом случае, я не уверен, что мне нравится эта стратегия, состоящая в том, чтобы попытаться отыграть действительный ввод.
В этом сообщении блога изложена более убедительная стратегия:
http://blog.bvsoftware.com/post/2009/01/08/How-to-filter-Html-Input-to-Prevent-Cross-Site-Scripting-but-Still-Allow-Design.aspx
Этот метод заключается в том, чтобы фактически проанализировать HTML-код в DOM, проверить его, а затем восстановить из него действительный HTML-код. Если разбор HTML может разумно обрабатывать искаженный HTML, то отлично. Если нет, то ничего страшного - я могу потребовать правильно сформированный HTML, поскольку пользователи должны использовать редактор tinyMCE. В любом случае я переписываю то, что я знаю, это безопасный, правильно сформированный HTML.
Проблема в том, что это просто описание, без ссылки на какую-либо библиотеку, которая фактически выполняет этот алгоритм.
Существует ли такая библиотека? Если нет, то что будет хорошим механизмом парсинга .NET HTML? И какие регулярные выражения следует использовать для дополнительной проверки a: href, img: src? Я скучаю по чему-то еще важному здесь?
Я не хочу, чтобы здесь снова было колесо с ошибками. Конечно, есть некоторые часто используемые библиотеки. Есть идеи?