2009-08-03 17 views
5

Tengo la situación común en la que recibo la entrada del usuario que usa un subconjunto de HTML (entrada con tinyMCE). Necesito tener algo de 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 PHP, veo muchas bibliotecas como HTMLPurifier que hacen el trabajo, pero parece que no puedo encontrar nada en .NET..NET HTML whitelisting (anti-xss/Cross Site Scripting)

básicamente estoy buscando una biblioteca para filtrar a una lista blanca de las etiquetas, los atributos de las etiquetas, y hace lo correcto con "difíciles" atributos como un: href y img: src

I' he visto la publicación de Jeff Atwood al http://refactormycode.com/codes/333-sanitize-html, pero no sé qué tan actualizado está. ¿Tiene alguna relación con lo que el sitio está utilizando actualmente? Y, en cualquier caso, no estoy seguro de que me sienta cómodo con esa estrategia de tratar de volver a convertir una entrada válida.

posterior Este blog expone 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, validar que, a continuación, volver HTML válido de ella. Si el análisis HTML puede manejar el HTML malformado de forma sensata, entonces genial. Si no, no es gran cosa: 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 una biblioteca de este tipo? Si no, ¿cuál sería un buen motor de análisis HTML .NET? ¿Y qué expresiones regulares deberían usarse para realizar la validación adicional a: href, img: src? ¿Me estoy perdiendo algo más importante aquí?

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

Respuesta

3

Bien, si quiere analizar, y le preocupa que el HTML inválido (x) entre, entonces el HTML Agility Pack es probablemente lo mejor para usar para analizar. Recuerde que no solo son elementos, sino también atributos de los elementos permitidos que debe permitir (por supuesto, debe trabajar con una lista blanca permitida de elementos y sus atributos, en lugar de intentar quitar cosas que podrían ser dudosas a través de una lista negra)

también existe la OWASP AntiSamy Project que es un trabajo en curso en curso - que también tienen un test site se puede tratar de XSS

expresión regular para esto es probablemente demasiado arriesgada la OMI.

+0

El paquete de agilidad es lo que terminé usando. Parece que está funcionando bien – Clyde

1

Tuve el mismo problema hace algunos años cuando estaba usando TinyMCE.

Todavía no parece haber soluciones dignas de XSS/HTML para listas blancas para .Net, así que he cargado una solución que he creado y he estado usando durante algunos años.

http://www.codeproject.com/KB/aspnet/html-white-listing.aspx

La lista defnintion blanco se basa en válidos elementos de TinyMCE.

Take Two: Mirando a su alrededor, Microsoft ha lanzado recientemente una lista blanca basada anti-XSS Biblioteca (V3.0), comprobar que fuera:

El Microsoft Anti-Cross Site Scripting Biblioteca V3 .0 (Anti-XSS V3.0) es una biblioteca de codificación diseñada para ayudar a los desarrolladores a proteger sus aplicaciones basadas en web ASP.NET de XSS ataques. Difiere de la mayoría de las bibliotecas de codificación en que utiliza la técnica de lista blanca - a veces se refiere como el principio de inclusiones - para proporcionar protección contra ataques XSS.Este enfoque funciona definiendo primero un conjunto de caracteres válidos o permitidos, y codifica cualquier cosa fuera de este conjunto (caracteres no válidos o posibles ataques ). El enfoque de lista blanca proporciona varias ventajas sobre otros esquemas de codificación . Las nuevas características de esta versión del Microsoft Anti-Cruz sitio de la biblioteca de secuencias de comandos incluyen: - Un lista blanca ampliada que soporta más idiomas - Mejoras de rendimiento - hojas de datos de rendimiento (en el ayuda en línea) - Soporte para Shift_JIS codifican para navegadores móviles - una aplicación de ejemplo - Seguridad del motor de tiempo de ejecución del módulo (SRE) HTTP

3

Microsoft tiene una biblioteca de código abierto para proteger contra XSS: AntiXSS.

+0

¿Qué pasa con esta respuesta? ¿Por qué fue downvoted? –

+2

Bien AntiXSS es solo una codificación, no es una solución de stripper o una lista blanca (todavía) – blowdart

+1

OK, gracias. No lo he usado yo mismo, así que probablemente debería limitarme a recomendar cosas que sé. –

2

http://www.microsoft.com/en-us/download/details.aspx?id=28589 Puede descargar una versión aquí, pero la he vinculado para el útil archivo DOCX. Mi método preferido es utilizar el administrador de paquetes NuGet para obtener el último paquete AntiXSS.

Puede usar el ensamblado HtmlSanitizationLibrary que se encuentra en la biblioteca 4.x AntiXss. Tenga en cuenta que GetSafeHtml() está en HtmlSanitizationLibrary, en Microsoft.Security.Application.Sanitizer.

0

https://github.com/Vereyon/HtmlRuleSanitizer resuelve exactamente este problema.

Tuve este desafío al integrar el editor wysihtml5 en una aplicación ASP.NET MVC. Noté que tenía un desinfectante muy simple pero simple basado en listas blancas que usaba reglas para permitir el paso de un subconjunto de HTML. Implementé una versión del servidor que depende del paquete HtmlAgility para analizar.

Microsoft Web Protection Library (antiguo AntiXSS) parece simplemente arrancar casi todas las etiquetas HTML y por lo que leí no puede adaptar fácilmente las reglas al subconjunto HTML que desea utilizar. Entonces esa no era una opción para mí.

Este HTML sanitizer también parece muy prometedor y sería mi segunda opción.