XSS bei neuem Element
Michael_K
- javascript
Hallo,
ich hätte eine Verständnisfrage. Wenn ein neues Element erstellt wird, ab "wann" muss man auf XSS achten?
Auf selfhtml wird ausgeführt: "Die Überschrift wird damit aber noch nicht angezeigt - sie hängt noch nicht einmal im Elementenbaum des Dokuments. Das Element ist lediglich als Objekt erzeugt. Die Methode createElement() gibt das erzeugte Objekt, also in dem Fall das h2-Element, zurück. Der Rückgabewert wird in der Variablen myH2 gespeichert"
Mein Verständnis war, unter Verwendung von JQuery, dass XSS kein Thema ist, solange das neue Element nicht eingebunden ist.
abstraktes Beispiel:
const newDiv = $('<div/>').append(Schadcode);
Solange newDiv nicht dem document angefügt wird, hat man noch kein Problem, oder doch? Mein Verständnis war immer, das erst beim Einhängen in das Dokument der eingeschleuste XSS Code ausgeführt wird.
Wäre dankbar für Hinweise, da ich aktuell das "säubern" immer auf newDiv durchgeführt habe und dann in das Dokument eingefügt wurde.
Gruss Michael
Hallo Michael_K,
das ist richtig, solange das Element nicht im DOM ist, passiert nichts.
Aber woher kannst Du Schadcode bekommen? Akzeptierst Du HTML Quellcode aus unsicheren Quellen, den Du dann ins DOM des Users einhängst? Ist das eine gute Idee?
Wenn dieses HTML von deinem Server stammt, solltest Du es serverseitig säubern bzw. mit htmlspecialchars behandeln, bevor es zum Browser geht.
Rolf
Hallo Rolf,
dank für die Information. Bei mir meckert eine Scansoftware, die auf Sicherheitslücken im Quellcode scannt, eine "Client_Potential_XSS" Warnung.
Wenn ich es richtig verstehe, meckert die Software, weil bei der Erstellung der neuen Elemente die Attribut-Werte und Textknoten teilweise dynamisch von Variablen kommen, die z.T. selbst aus dem DOM ermittelt werden (oder Werte, die aus einer lokalen Datei interaktiv eingelesen werden). Diese "Client potential XSS" habe ich bzgl. Risikopotential noch nicht wirklich verstanden. Ich verstehe es so, dass wenn Clientseitig der DOM manipuliert wird und JS diesen dann in einer Form als Input benutzt, schadhafter Code entstehen kann (aber nicht für den Server, der liefert nur die angefragten Webseiten und JS files aus.
Da die Web Applikation auch Lokale Dateien einliesst und der Inhalt anzeigt wird, habe ich grundsätzlich XSS bedacht und Maßnahmen eingebaut. Allerdings überprüfen die Maßnahmen mit DOMPurify den neuen Jquery Node, wenn er noch nicht im DOM hängt. Ich dachte, dass wäre ausreichend, nur leider scheint die Scansoftware, dass nicht zu erkennen.
Ich nutze es so, weil es wohl auch performanter ist:
const dirtyNode = $('<div/>').append(schadCode), cleanNode = DOMPurify.sanitize(dirtyNode[0], {IN_PLACE: true}); $('#targetID').append(cleanNode);
Ich dachte, dass ich damit auf der sicheren Seite bin?
Gruss, Michael
Hallo Michael_K,
Scanner suchen nach Mustern. Wenn sie eins finden, machen sie Piep. Ob das Muster Sinn ergibt, wissen sie nicht.
Scanner ersparen nicht das eigene Denken. False Positives gehören zum Geschäft. Gibt's Kommentarmarkierungen, mit denen man dem Scanner ein "Ruuuhig, Brauner" zukommen lassen kann?
Rolf