2010-07-04 8 views
6

Mein Ziel ist HTML von einem Endbenutzer eingegeben zu nehmen, bestimmte unsichere Tags wie <script> zu entfernen und es dem Dokument hinzuzufügen. Kennt jemand eine gute Javascript-Bibliothek, um HTML zu bereinigen?Gibt es eine gute JavaScript-basierte HTML-Parsing-Bibliothek?

Ich suchte herum und fand ein paar online, einschließlich John Resig's HTML parser, Erik Arvidsson's simple html parser und Google's Caja Sanitizer, aber ich habe nicht in der Lage gewesen, viele Informationen zu finden, ob die Menschen gute Erfahrungen dieser Bibliotheken mit gehabt haben, und ich mache mir Sorgen, dass sie sind nicht wirklich robust genug, um beliebiges HTML zu verarbeiten. Wäre es besser, wenn ich den HTML-Code zur Bereinigung an meinen Java-Server sende?

+4

Da es besser ist, auf der Serverseite bereinigt zu werden, ist es vielleicht nicht den zusätzlichen Aufwand wert. Wenn Ihr clientseitiger Desinfizierer immer genau die gleichen Ergebnisse liefert wie Ihre Server-Seite, ist es wahrscheinlich nicht wert. –

Antwort

2

Sie können HTML mit jQuery analysieren, aber ich bin ziemlich sicher, dass jede Blacklist basierte (dh herausfiltern) Ansatz zu sanieren wird fehlschlagen - Sie brauchen wahrscheinlich eine "Filterung" basierte Ansatz und letztlich wollen Sie nicht aus Sicherheitsgründen sowieso auf JavaScript angewiesen zu sein. In jedem Fall als Referenz können Sie jQuery für DOM-Parsing wie folgt verwenden:

var htmlS = "<html>etc.etc."; 
$(htmlS).remove("script"); /* DONT RELY ON THIS FOR SECURITY */ 
+0

Guter Punkt. In der Tat, Sie brauchen wahrscheinlich nicht einmal den jQuery-Wrapper per se, aber es würde die Dinge einfacher machen. Lassen Sie den Browser selbst das Parsen behandeln und verwenden Sie dann die DOM-Methoden, die Ihnen zur Verfügung stehen. – Matchu

+3

Verstand erklären wie? – icktoofay

+0

@icktoofay yep bearbeitet meine schlechte –

2

Würde ich besser dran, nur die HTML zu meinem Java-Server für die Hygienisierung schicken?

Ja.

Die Filterung der "unsicheren" Eingabe muss serverseitig erfolgen. Es gibt keinen anderen Weg, es zu tun. Es ist nicht möglich, clientseitig zu filtern, da die "Client-Seite" ein Web-Browser sein kann oder genauso einfach ein Bot mit einem Skript sein kann.

+2

Filterung unsichere Eingabe, ja, das muss auf dem Server getan werden, weil der Client anderen Benutzern Schaden zufügen kann, indem er nicht die Filterung tut, die es tun soll. Dies filtert jedoch unsichere Ausgaben und ein Client, der nicht filtert, schadet sich nur selbst. Daher ist es in Ordnung, dies mit Javascript zu tun. –

+0

@bart "ein Client, der nicht filtert, schadet nur sich selbst. Deshalb ist das mit Javascript in Ordnung" <- das ist nicht ganz richtig, da ein kompromittierter Benutzer Zugriff auf andere Benutzer haben könnte –

+0

Ein kompromittierter Benutzer kann alle möglichen schlechten Dinge. Wenn Sie Skript-Tags auf dem Server herausfiltern, werden diese beim Rendern einfach zurückgestellt. Oder wahrscheinlicher, es wird sich nicht mit diesen Unannehmlichkeiten herumschlagen und einfach den bösen Code direkt ausführen. –