2017-09-17 2 views
0

Ich habe diese spezielle XSS-Leitung, die ich versuche, mit einer Regex zu erfassen/zu erkennen. Ich habe mehrere versucht, keiner scheint zu funktionieren. Obwohl Online-Regex-Testwebsites es erwischen, wenn ich es in tatsächlichem Code versuche, funktioniert es nicht.Javascript Regex zum Abfangen spezieller XSS-Zeilen

Hier ist dir spezielle Linie, die ich mit regex fangen müssen:

<<​ ​​ ​ScRiPT​ ​​ ​​ ​>alert("XSS");//<</​ ​ScRiPT​ ​​ ​> 

Und hier ist das, was ich bisher habe:

/[<]*<\s*script\s*>.*[/]*[<]*<\s*\/\s*script\s*>/ig; 

Was bin ich?

+1

Gibt es bedeutete eine Schließung zu sein? Beim Einfügen in Regexer enthält dieser Text eine Reihe von merkwürdig unsichtbaren Zeichen, die keine normalen Leerzeichen sind. Ich bin mir nicht sicher, was Sie eingefügt haben, ist richtig. – jas7457

+2

Dies ist der erste Fehler, den man machen kann, wenn er Sicherheitsmessungen anwendet. Sie sollten keine Tags akzeptieren, wenn Ihr Inhalt dies nicht erlaubt. Zum Beispiel kann ich Ihre Regex vollständig umgehen, nur indem Sie andere Tags verwenden. '' wird alarmieren (1). – felixmosh

+0

Warum verwenden Sie nicht CSP? –

Antwort

0

Die Whitespace-Klasse (\s) doesn't contain Null-Breite-Raum. Sie müssen also, dass explizit angeben:

/[<]*<[\s\u200B]*script[\s\u200B]*>.*[/]*[<]*<[\s\u200B]*\/[\s\u200B]*script[\s\u200B]*>/ig; 

Hier ist ein Ausschnitt davon arbeiten:

var str = "<<​ ​​ ​ScRiPT​ ​​ ​​ ​>alert(\"XSS\");//<</​ ​ScRiPT​ ​​ ​>"; 
 
var regex = /[<]*<[\s\u200B]*script[\s\u200B]*>.*[/]*[<]*<[\s\u200B]*\/[\s\u200B]*script[\s\u200B]*>/ig; 
 
document.write("Regex matched: " + regex.test(str));

Verwandte Themen