Weiß jemand, ob ein DOM Node
vom Typ Text
garantiert nicht als HTML vom Browser interpretiert werden kann?Wird ein DOM-Textknoten garantiert nicht als HTML interpretiert?
Weitere Details folgen.
Hintergrund
Ich bin für einen Freund ein einfaches Web-Kommentar-System bauen, und ich habe über XSS-Angriffe gedacht. Ich denke nicht, dass das Filtern oder Entkommen von HTML-Tags eine sehr elegante Lösung ist - es ist zu einfach, eine Faltung zu entwickeln, die über den Filter hinausrutschen wird. Das grundlegende Problem ist, dass ich garantieren möchte, dass für bestimmte Teile des Inhalts (d. H. Den Inhalt, den zufällige nicht authentifizierte Web-Benutzer POST), der Browser nie versucht, den Inhalt zu interpretieren oder auszuführen.
Ein einfacher (Text) beginnen
Der erste Gedanke, den Sinn kam nur Content-Type: text/plain
zu bedienen ist, aber dies hat zu einer ganzen Seite anzuwenden. Sie können einen Klartext IFRAME
in der Mitte einer Seite einfügen, aber es ist hässlich, und es erstellt Fokusprobleme, wenn der Benutzer in den Rahmen klickt.
innertext/textcontent/JQuery
Es stellt sich heraus, dass einige Browser-spezifische (innerText
in IE, textContent
in FF, Safari, etc.) gibt es Attribute, die, wenn es gesetzt ist, eine schaffen erforderlich single Text
Knoten.
JQuery versucht, den Unterschied in der Browser-spezifischen Attribute zu vermeiden, durch eine einzige Funktion text(val)
Implementierung, die die Browser-spezifischen Attribute überspringt und geht direkt an document.createTextNode(text)
, die, wie Sie, einen Text
Knoten schafft erraten kann.
W3 DOM Text
Node
s
Also ich denke, das ist in der Nähe, was ich will, es sieht good-- Text
Knoten keine Kinder haben können, und es scheint, als wären sie nicht so interpretiert werden kann, HTML. Aber ich bin nicht 100% sicher von den offiziellen Dokumenten.
- Schnittstelle
Node
: http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1950641247 - Schnittstelle
Text
: http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1312295772 textContent
: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-textContent
Der Teil von textContent
ist besonders ermutigend, weil sie sagt, „auf Einstellung wird kein Parsing entweder durchgeführt, Die Eingabezeichenfolge wird als reiner Textinhalt verwendet. " Aber ist das grundlegend für alle Knoten oder nur Knoten, auf denen Sie textContent
setzen? Dies scheint wahrscheinlich eine dumme Frage zu sein, aber es könnte wichtig sein, weil IE textContent
nicht unterstützt (siehe oben).
Zurück um auf die erste Frage
Kann jemand bestätigen/reject, dass dies funktionieren wird? Das heißt, dass ein W3 DOM-konformer Browser niemals einen Text
Knoten als HTML interpretiert, egal welchen Inhalt? Ich wäre sehr dankbar, wenn diese quälende kleine Unsicherheit gelöst wäre.
Vielen Dank für Ihre Zeit!
Ich bin stützen meine Paranoia auf: http://stackoverflow.com/questions/53728/will-html-encoding-prevent-all-kinds-of-xss-attacks http: // blog. stackoverflow.com/2008/06/safe-html-and-xss/ – elliot42
@surprise_ falsch. Es gibt viele andere Injektionstechniken, von Encoding - Tricks, bis hin zu Attributinjektionen, JavaScript, CSS usw – Zach