2012-06-23 19 views

Respuesta

2

Este enfoque no es idéntico a StackExchange, pero encontré que la biblioteca AntiXSS 4.x es una forma sencilla de desinfectar la entrada para permitir HTML "seguro".

http://www.microsoft.com/en-us/download/details.aspx?id=28589 Puede descargar una versión aquí, pero la vinculé 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.

content = Sanitizer.GetSafeHtml(userInput); 

Esto se puede hacer antes de guardar en la base de datos. La ventaja es eliminar el contenido malicioso de forma inmediata y no tener que preocuparse por él cuando lo genere. La desventaja es que no manejará ningún contenido de base de datos existente, y usted tiene que aplicar esto cada vez que realice actualizaciones de la base de datos.

El enfoque alternativo es utilizar este método cada vez que muestre contenido.

Me encantaría saber cuál es el enfoque preferido.

+1

Me parece que esto es demasiado agresivo para limpiar la entrada WYSIWYG. Los enlaces se reducen a solo . –

+1

Correcto: no quiero la codificación AntiXss. Sin embargo, la biblioteca AntiXss incluye la biblioteca Sanitization. Sin embargo, parece que la versión 4.2 "rompió todo". Este enlace en StackOverflow enlaces a un montón de cosas útiles: http://stackoverflow.com/questions/3959136/antixss-htmlencode-vs-antixss-getsafehtmlfragment incluyendo esta solución que utiliza una lista blanca (y puede personalizarlo usted mismo) para desinfectar: ​​http://eksith.wordpress.com/2012/02/13/antixss-4-2-breaks-everything/ –

0

Puede probar el analizador JSoup, que junto con la desinfección de su entrada HTML también proporcionará muchas funcionalidades de fábrica. Puede visitar http://jsoup.org/ para obtener más información sobre el JSoup y descargar el binario desde allí. Proporciona el método DOM para recorrer su árbol HTML y obtener los elementos deseados.

Aunque desinfectar su código HTML generado para evitar el ataque XSS es una buena práctica, pero le aconsejo encarecidamente que evite utilizar cualquier analizador para evitar la conexión XSS al desinfectar su entrada de HTML. Si su árbol HTML es muy grande, entonces el tiempo de respuesta aumentaría. Intenté desinfectar su árbol HTML, asegurándose de que todo lo que el usuario ingrese en el FORMULARIO sea apropiado y según el valor esperado.

Puede visitar www.owasp.org para saber más acerca de cómo evitar el ataque XSS. El sitio le proporciona posibles hojas de trucos para asegurarse de que su árbol HTML esté libre de cualquier ataque XSS.

0

ASP.NET HttpUtility.Htmlencode() lo hace para usted. Pero si quiere bloquear scripts peligrosos, primero NO inserte en su base de datos. Primero, limpie el texto HTML antes de insertarlo en la base de datos.

He encontrado una clase que lo haga por usted: http://eksith.wordpress.com/2012/02/13/antixss-4-2-breaks-everything/

Trabaja muy bien y se puede añadir nuevas etiquetas y atributos a la lista blanca de encargo del desinfectante.

Nota: La biblioteca Microsoft Sanitizer y Anti-XSS no me fue útil. Puede ser que también puedas probarlos.

Cuestiones relacionadas