Ich teste xss-Angriffe auf meinen eigenen Code. Das Beispiel unten ist eine einfache Box, in der ein Benutzer eingeben kann, was immer er möchte. Nach dem Drücken von "Test!" Knopf, JS wird die Eingabezeichenkette in zwei Divs zeigen. Dies ist ein Beispiel, das ich gemacht habe, um meine Frage besser zu erklären:
%Vor%
Wenn Sie versuchen, es in eine .html-Datei zu kopieren und auszuführen, wird es funktionieren, aber wenn Sie versuchen, <script>alert('xss')</script>
einzugeben, wird nur eine Warnmeldung ausgegeben: die eine in 'test-html' div (mit html () Funktion).
Ich kann wirklich nicht verstehen, warum das passiert, und auch, wenn ich den Code mit Firebug inspiziere, bekomme ich dieses Ergebnis (nachdem ich das Skript eingefügt habe)
%Vor% Wie Sie sehen können, ist test-html
div leer und test-innerhtml
div enthält das Skript. Kann mir jemand sagen warum? Liegt das daran, dass html () sicherer ist gegen die Injektion von Skripten oder ähnliches?
Vielen Dank im Voraus, beste Grüße.
Im Gegensatz zu dem, was auf dieser Seite gesagt wird, sind jQuery.html()
und die vielen jQuery-Funktionen , die HTML-Strings als Argumente akzeptieren, anfälliger für DOM-basierte XSS-Injection als innerHTML
wie vom OP bemerkt.
jQuery.html()
extrahiert die <script>
-Tags, aktualisiert das DOM und wertet den in den Skript-Tags eingebetteten Code aus .
Als Ergebnis kann XSS ohne Benutzerinteraktion passieren, selbst wenn das DOM bei Verwendung von jQuery.html()
geladen wird.
Dies ist sehr einfach zu demonstrieren.
Dies ruft alert()
:
Während dies nicht:
%Vor% Dies ist ähnlich wie diese Frage und this one . .html()
entfernt die Skript-Tags, bevor sie den HTML-Code eingeben und separat ausführen.
Warum der zweite nicht ausgeführt wird, liegt daran, dass dynamisch hinzugefügte Skripte nicht ausgeführt werden, nachdem die Seite geladen wurde.
Aber, wie @Ben betont, gibt es eine Menge XSS-Öffnungen, wenn man solche Dinge akzeptiert. Das heißt, wenn die Informationen auf ihrer eigenen Seite angezeigt werden, können sie beliebigen Code auf ihrem eigenen Rechner ausführen. Das große Problem wird sein, wenn Sie dies speichern oder an andere Benutzer senden. Wenn Sie das nicht tun, gibt es keinen Schutz der Benutzer vor sich selbst in dieser Hinsicht. Vielleicht hilft es zu wissen, wovor du dich schützen willst.
Tags und Links javascript html jquery xss input