2010-11-11 17 views
7

Qual è la migliore libreria/approccio per rimuovere Javascript dall'HTML che verrà visualizzato?Java: il modo migliore per rimuovere Javascript dall'HTML

Per esempio, prendete:

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

e lasciare:

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

vedo il progetto DeXSS. Ma è il modo migliore per andare?

+0

Probabilmente, il modo più semplice per farlo è utilizzare XSLT (scrivere un foglio di stile che copia gli elementi e gli attributi consentiti), ma funziona solo se il documento è XHTML (a meno che XSLT non abbia una modalità HTML --- I can ' Ricordo se ce n'è uno). –

+2

Che hai scritto "IE" invece di "i.e." mi ha confuso senza fine! – JasonFruit

+0

@JasonFruit: lolz! anch'io mi sono confuso –

risposta

10

JSoup ha un metodo semplice per disinfettare l'HTML basato su una whitelist. Verifica http://jsoup.org/cookbook/cleaning-html/whitelist-sanitizer

Utilizza una lista bianca, che è più sicura dell'approccio blacklist utilizzato da DeXSS. Dalla pagina DeXSS:

Esistono ancora numerosi attacchi XSS noti che DeXSS non rileva ancora.

Una lista nera non consente solo le costruzioni note non sicure, mentre una lista bianca consente solo costruzioni note e sicure. In questo modo le costruzioni sconosciute e potenzialmente pericolose saranno protette solo con una whitelist.

+1

Jsoup sembra semplice ed efficace, grazie – mtyson

1

Il modo più semplice sarebbe quello di non avere quelli in primo luogo ... Probabilmente avrebbe senso consentire l'uso di tag molto semplici nei campi in forma libera e di disabilitare qualsiasi tipo di attributi.

Probabilmente non è la risposta che si sta per, ma in molti casi si desidera solo fornire funzionalità di markup, non una suite di modifica completa.


Analogamente, un altro approccio ancora più semplice sarebbe quello di fornire una sintassi basata sul testo, come Markdown, per la modifica. (non in molti modi è possibile sfruttare l'area di modifica SO, ad esempio Sintassi di Markdown + elenco di tag limitato senza attributi).

1

Si potrebbe provare dom4j http://dom4j.sourceforge.net/dom4j-1.6.1/ Questo è un parser DOM (al contrario di SAX) e consente di attraversare e manipolare il DOM, rimuovendo nodo attributi come onmouseover per esempio (o gli elementi interi come <script>) in modo semplice, prima di scrivere di nuovo fuori o streaming da qualche parte. A seconda di quanto sia selvaggio il tuo html, potresti aver bisogno di ripulirlo prima - jtidy http://jtidy.sourceforge.net/ va bene.

Ma ovviamente tutto ciò comporta un sovraccarico se lo stai facendo al momento del rendering della pagina.

Problemi correlati