Белый список .NET HTML (анти-xss / межсайтовый скриптинг)

У меня есть распространенная ситуация, когда у меня есть пользовательский ввод, который использует подмножество 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? Я скучаю по чему-то еще важному здесь?

Я не хочу повторно реализовывать колесо с ошибками здесь. Конечно, есть некоторые обычно используемые библиотеки. Есть идеи?