2010-11-11 15 views
7

¿Cuál es la mejor biblioteca/enfoque para eliminar Javascript de HTML que se mostrará?Java: la mejor manera de eliminar Javascript de HTML

Por ejemplo, tomemos:

<html><body><span onmousemove='doBadXss()'>test</span></body></html> 

y dejar:

<html><body><span>test</span></body></html> 

que ver el proyecto DeXSS. ¿Pero es esa la mejor manera de ir?

+0

Probablemente, la manera más fácil de hacerlo es usar XSLT (escribir una hoja de estilo que copie los elementos y atributos permitidos), pero eso solo funciona si su documento es XHTML (a menos que XSLT tenga un modo HTML --- yo puedo ' Recuerdo si hay uno). –

+2

que escribió "IE" en lugar de "es decir" me confundió sin fin! – JasonFruit

+0

@JasonFruit: lolz! yo también me confundí. –

Respuesta

10

JSoup tiene un método simple para desinfectar HTML basado en una lista blanca. Verificar http://jsoup.org/cookbook/cleaning-html/whitelist-sanitizer

Utiliza una lista blanca, que es más segura que el enfoque de lista negra que utiliza DeXSS. Desde la página DeXSS:

Todavía hay una serie de ataques XSS conocidos que DeXSS aún no detecta.

Una lista negra solo impide construcciones inseguras conocidas, mientras que una lista blanca solo permite construcciones seguras conocidas. Las construcciones desconocidas, posiblemente inseguras, solo estarán protegidas con una lista blanca.

+1

Jsoup parece simple y efectivo, gracias – mtyson

1

La manera más fácil sería no tenerlos en primer lugar ... Probablemente tendría sentido permitir el uso de etiquetas muy simples en los campos de formato libre y no permitir ningún tipo de atributos.

Probablemente no sea la respuesta que está buscando, pero en muchos casos solo desea proporcionar capacidades de marcado, no una suite de edición completa.


De forma similar, otro enfoque aún más sencillo sería proporcionar una sintaxis basada en texto, como Markdown, para editar. (No de muchas maneras en que puede explotar el área de edición SO, por ejemplo. Sintaxis de reducción + lista de etiquetas limitada sin atributos).

1

Usted podría intentar dom4j http://dom4j.sourceforge.net/dom4j-1.6.1/ Se trata de un analizador DOM (en contraposición a SAX) y permite recorrer y manipular el DOM, la eliminación de nodo de atributos como onmouseover por ejemplo (o elementos enteros como <script>) con facilidad, antes de escribir de vuelta o transmitiendo en algún lado. Dependiendo de qué tan salvaje es su html, es posible que deba limpiarlo primero - jtidy http://jtidy.sourceforge.net/ es bueno.

Pero obviamente, hacer todo esto implica un poco de sobrecarga si lo haces en el momento de renderizar la página.

Cuestiones relacionadas