2010-11-11 13 views
7

Was ist die beste Bibliothek/Ansatz zum Entfernen von Javascript aus HTML, die angezeigt werden?Java: Die beste Methode, um Javascript aus HTML zu entfernen

Nehmen wir zum Beispiel:

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

und verlassen:

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

Ich sehe das DeXSS Projekt. Aber ist das der beste Weg zu gehen?

+0

Wahrscheinlich ist der einfachste Weg, dies zu tun XSLT (schreiben Sie ein Stylesheet, das die zulässigen Elemente und Attribute kopiert), aber das funktioniert nur, wenn Ihr Dokument XHTML ist (es sei denn, XSLT hat einen HTML-Modus --- ich kann t daran erinnern, wenn es eins gibt). –

+2

Dass du "IE" anstelle von "d. H." verwirrte mich bis zum Ende! – JasonFruit

+0

@JasonFruit: lolz! Ich wurde auch verwirrt. –

Antwort

10

JSoup bietet eine einfache Methode zur Bereinigung von HTML auf der Grundlage einer Whitelist. Prüfen http://jsoup.org/cookbook/cleaning-html/whitelist-sanitizer

Es verwendet eine Whitelist, die sicherer ist als die Blacklist-Ansatz von DeXSS verwendet. Von der DeXSS-Seite:

Es gibt immer noch eine Reihe bekannter XSS-Angriffe, die DeXSS noch nicht erkennt.

Eine Blacklist lässt nur bekannte unsichere Konstruktionen zu, während eine Whitelist nur bekannte sichere Konstruktionen zulässt. So werden unbekannte, möglicherweise unsichere Konstruktionen nur mit einer Whitelist geschützt.

+1

Jsoup scheint einfach und effektiv, thx – mtyson

1

Der einfachste Weg wäre, diese nicht an erster Stelle zu haben ... Es würde wahrscheinlich Sinn machen, nur sehr einfache Tags in Freiform-Feldern zu verwenden und jegliche Art von Attributen zu verbieten.

Wahrscheinlich nicht die Antwort, die Sie anstreben, aber in vielen Fällen möchten Sie nur Markup-Funktionen bereitstellen, nicht eine vollständige Bearbeitungssuite.

In ähnlicher Weise wäre ein weiterer, noch einfacherer Ansatz, eine textbasierte Syntax wie Markdown zur Bearbeitung bereitzustellen. (nicht so viele Möglichkeiten, wie Sie den SO-Editierbereich zum Beispiel ausnutzen können. Markdown-Syntax + begrenzte Tag-Liste ohne Attribute).

1

Sie dom4j versuchen könnten http://dom4j.sourceforge.net/dom4j-1.6.1/ Dies ist ein DOM-Parser (im Gegensatz zu SAX Gegensatz) und ermöglicht es Ihnen, leicht zu durchqueren und zu manipulieren, das DOM, das Entfernen Knoten wie onmouseover zum Beispiel Attribute (oder ganze Elementen wie <script>), bevor sie wieder heraus zu schreiben oder irgendwo streamen. Je nachdem, wie wild Ihr HTML ist, müssen Sie es möglicherweise zuerst aufräumen - jtidy http://jtidy.sourceforge.net/ ist gut.

Aber offensichtlich all das zu tun, erfordert etwas Overhead, wenn Sie dies zum Zeitpunkt der Seitenwiedergabe tun.

Verwandte Themen