.NET HTML lista blanca (anti-xss / Cross Site Scripting)

Tengo la situación común en la que recibí una entrada de usuario que utiliza un subconjunto de HTML (entrada con tinyMCE). Necesito tener alguna protección del lado del servidor contra los ataques XSS y estoy buscando una herramienta bien probada que la gente esté usando para hacer esto. En el lado de PHP, veo muchas bibliotecas como HTMLPurifier que hacen el trabajo, pero parece que no puedo encontrar nada en .NET.

Básicamente estoy buscando una biblioteca para filtrar a una lista blanca de etiquetas, atributos en esas etiquetas, y hago lo correcto con atributos "difíciles" como a: href e img: src

He visto el post de Jeff Atwood enhttp://refactormycode.com/codes/333-sanitize-html, pero no sé hasta qué punto está actualizado. ¿Tiene alguna relación con lo que el sitio está usando actualmente? Y, en cualquier caso, no estoy seguro de estar a gusto con la estrategia de tratar de volver a expresar una entrada válida.

Esta publicación del blog presenta lo que parece ser una estrategia mucho más convincente:

http://blog.bvsoftware.com/post/2009/01/08/How-to-filter-Html-Input-to-Prevent-Cross-Site-Scripting-but-Still-Allow-Design.aspx

Este método consiste en analizar realmente el HTML en un DOM, validarlo y luego reconstruir el HTML válido a partir de él. Si el análisis de HTML puede manejar el HTML mal formado con sensatez, entonces genial. Si no, no es un gran problema, puedo exigir HTML bien formado ya que los usuarios deberían usar el editor tinyMCE. En cualquier caso, estoy reescribiendo lo que sé que es un HTML seguro y bien formado.

El problema es que es solo una descripción, sin un enlace a ninguna biblioteca que realmente ejecute ese algoritmo.

¿Existe tal biblioteca? Si no, ¿cuál sería un buen motor de análisis de .NET HTML? ¿Y qué expresiones regulares deberían usarse para realizar una validación adicional a: href, img: src? ¿Me estoy perdiendo algo más importante aquí?

No quiero volver a implementar una rueda de buggy aquí. Seguramente hay algunas bibliotecas de uso común por ahí. ¿Algunas ideas?

Respuestas a la pregunta(6)

Su respuesta a la pregunta