2017-09-17 2 views
0

J'ai cette ligne spéciale XSS que j'essaye d'attraper/détecter avec une regex. J'ai essayé plusieurs, aucun ne semble fonctionner. Bien que les sites de tests regex en ligne l'attrapent, quand je l'essaie en code réel, ça ne marche pas.Exgex Javascript pour attraper des lignes XSS spéciales

toi est ici ligne spéciale que je dois attraper avec regex:

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

Et voici ce que j'ai jusqu'à présent:

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

Qu'est-ce que je manque?

+1

Est-il censé être une fermeture? En outre, lors du collage dans l'expression rationnelle, ce texte contient un ensemble de caractères invisibles qui ne sont pas des caractères d'espace normaux. Je ne suis pas sûr que ce que vous avez collé est correct. – jas7457

+2

C'est la première erreur que l'on peut faire quand il essaie d'appliquer des mesures de sécurité. Vous ne devez pas accepter de balise si votre contenu ne l'autorise pas. Par exemple, je peux contourner votre regex entièrement en utilisant d'autres tags. '' alertera (1). – felixmosh

+0

Pourquoi n'utilisez-vous pas CSP? –

Répondre

0

La classe d'espaces (\s) doesn't contain espace de largeur nulle. Donc, vous devez préciser que explicitement:

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

Voici un extrait de celui-ci travaille:

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));