JavaScript DOM-XSS-Injection validation
Ist dieser reguläre Ausdruck genug, um zu fangen alle cross-site-scripting-versuche, wenn das einbetten von HTML-Code in den DOM. zB: wie mit dem Dokument.write()
(javascript:|<\s*script.*?\s*>)
Darauf verwiesen wird in diesem Dokument aus modsecurity.com
http://www.modsecurity.org/documentation/Ajax_Fingerprinting_and_Filtering_with_ModSecurity_2.0.pdf
Wäre es fangen alle <\sSkript.?\s*> Varianten, die in UTF-8 zum Beispiel?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leider nicht. Tatsächlich gibt es durchaus ein paar Möglichkeiten, Sie schleichen vorbei, dass der regex, wenn ein Angreifer versuchen es wirklich. Mit modernen Browsern, die regex sollte tun einen ziemlich guten job, aber es ist nicht erschöpfend. Zum Beispiel, etwas entlang der Linien von diesem öffnen könnte javascript, ohne es ausdrücklich zu sagen-Skript oder javascript
Check-out hier (etwas veraltet, aber ruft die Nummer auf) und hier weitere Beispiele
Hahahahahahahahahaha.
Sorry. Aber wirklich... Nein, das ist nicht mal die Spitze des Eisbergs.
Daniel hat erwähnt, dass man eine andere Methode der Injektion Skript, aber es gibt wirklich Hunderte. Es ist überhaupt nicht möglich, desinfizieren Sie HTML mit einem einfachen regex. Der einzige Ansatz (und selbst dann ist es nicht trivial) ist, richtig zu analysieren, HTML, werfen alle fehlerhaften Sequenzen und element - /Attributnamen, außer ein paar bekannten sicheren.
Natürlich gilt dies nur, wenn Sie tatsächlich bewusst akzeptieren, HTML-Eingabe-und Sie wollen die Begrenzung der potenzielle Schaden. Wenn die situation ist, dass Sie akzeptieren, text aber vergessen zu entkommen, es richtig auf dem Weg nach draußen, Sie brauchen, um zu beheben, dass die HTML-escaping, weil keine Menge von input-sniffing wird fix ein Ausgabe-problem.
Dies ist der Grund, warum mod_security ist völlig falsch. Es gibt Ihnen die illusion größerer Sicherheit durch den Fang ein paar von den meisten basic-injection-Techniken, die während der Vermietung alles andere bis zu einer anfälligen Anwendung. Es wird nicht, am Ende, die verhindern, dass Sie gehackt, aber die weitere Injektion Unterschriften, die Sie hinzufügen, desto mehr werden es leugnen und Durcheinander legitimen Anfragen. Zum Beispiel könnte es verhindern, dass ich aus der Eingabe diese Meldung, weil Sie die Zeichenfolge enthält
<script>
.Den anderen antwortenden Recht: es gibt viele Kontexte, durch die Injektion kann auftreten. Denken Sie daran, die Lösung muss berücksichtigt werden, dass sowohl die vielen Kontexte, in denen eine Injektion auftreten können. Blacklist (oder "bekannt schlecht") Ansatz für die Filterung nicht funktionieren, weil Sie zum Opfer fallen, um Angriffe Kodieren, Injektionen mit unerwarteten Zeichen setzt, die kreative Verwendung von Leerzeichen und andere Techniken. Weitere Informationen finden Sie unter OWASP DOM-Basierten XSS. Diese Seite Links erziehen auf die "problem" - Seite.
Als für die Lösung, betrachten Sie die OWASP DOM XSS Prevention Cheat Sheet, die wir gerade veröffentlicht. Es gibt mehrere tool-kits verwiesen wird, innerhalb der Spickzettel, die Ihnen bei der Umsetzung der Flucht oder Codierung Strategien. Wahrscheinlich MEINE LIEBLINGS - Ansatz, um sicherzustellen, dass die server-geschrieben von client-side code codiert ist und entsprechend maskiert ist JXT. Von der google-code Seite:
Beachten Sie, dass diese auto-escaping für Kontexte, aber auch ein benutzerdefiniertes tag, das erlaubt die un-escaped-Ausgang, für den Fall spezielle Elemente Ihrer Seite/app werden gebrochen durch eine cart blanch Codierung regime.