2012-02-09 23 views
8

Estoy intentando utilizar jsoup para desinfectar el el html publicado desde un WYSIWYG en mi cliente (tinymce como es el caso)jsoup demasiado estrictos para el editor WYSIWYG

El modo relajado parece no estar relajado lo suficiente como por defecto elimina los elementos de span y cualquier atributo de estilo.

por ejemplo

String text = "<p style="color: #ff0000;">foobar</p>"; 

    Jsoup.clean(text, Whitelist.relaxed()); 

habría salida

<p>foobar</p> 

y

<span>foobar</span> 

se eliminaría por completo.

¿Alguien tiene alguna experiencia en el uso de Jsoup para erradicar la posibilidad de ataques XSS y aún permitir el paso de los elementos y atributos anteriores?

Editar: He ido con lo siguiente. ¿Alguien podría aconsejar sobre qué tan vulnerable es esto?

Jsoup.clean(pitch, Whitelist.relaxed().addTags("span").addAttributes(":all","style")); 

Editar 2: Alguien ha utilizado la biblioteca owasp en producción. Parece desinfectar correctamente preservando el estilo correcto. OWASP

+0

debe querer decir Jsoup.clean(), ¿verdad? –

+0

Cheers B. Anderson. He hecho la corrección. – jaseFace

Respuesta

7

Parece que es posible tener XSS utilizando el atributo de estilo ..

XSS attacks and style attributes

http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/

http://www.acunetix.com/websitesecurity/cross-site-scripting.htm (Mira la sección DIV, que asumiría las obras de la misma SPAN)

Aquí hay un código que escribí para probar el ejemplo en el último enlace ..

text = "<span style=\"width: expression(alert('XSS'));\">"; 
    System.out.println(Jsoup.clean(text, org.jsoup.safety.Whitelist.relaxed().addTags("span").addAttributes(":all","style"))); 

Emite la entrada exactamente. Si eso es realmente un vector XSS, entonces aún podría estar en problemas.

+0

Buen detalle. Gracias. ¿Conoces una biblioteca o un método que pueda usar para probar la seguridad de los contenidos del atributo de estilo pasado? De lo contrario, tendré que quitar la mayoría de las hermosas características de estilo wysiwyg disponibles a través de tinymce. – jaseFace

+0

Lo siento ... no lo hago. –

+0

He intentado el ejemplo que diste y jsoup es lo suficientemente inteligente como para quitar el atributo de estilo ofensivo, pero lo permite a través de un estilo simple como style = "color: red". Sin embargo, todavía me siento incómodo. – jaseFace

Cuestiones relacionadas