2017-09-17 5 views
0

나는이 특별한 XSS 행을 잡아 내고/정규식으로 탐지하려고한다. 나는 여러 사람을 시도했지만 아무도 작동하지 않습니다. 온라인 정규 표현식 테스트 사이트가 그것을 포착하기는하지만, 실제 코드에서 시도하면 작동하지 않습니다. 여기특수한 XSS 행을 잡기위한 자바 스크립트

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

그리고 내가 지금까지 무엇을 가지고 :

여기 너를 내가 정규식으로 잡을 필요가 특별한 라인 내가 무엇을 놓치고

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

?

+1

는 폐쇄있을 의미가 있습니까? 또한, regexer에 붙여 넣을 때, 그 텍스트는 정상적인 공백 문자가 아닌 이상한 보이지 않는 문자들을 가지고 있습니다. 붙여 넣은 것이 맞는지 잘 모르겠습니다. – jas7457

+2

이것은 보안 측정을 적용 할 때마다 할 수있는 첫 번째 실수입니다. 콘텐츠에서 허용되지 않는 태그는 허용하지 않아야합니다. 예를 들어 다른 태그를 사용하여 정규 표현식을 완전히 무시할 수 있습니다. ''은 (1) 경고합니다. – felixmosh

+0

왜 CSP를 사용하지 않습니까? –

답변

0

공백 클래스 (\s) doesn't contain 너비가없는 공백. 그래서 당신은 명시 적으로 지정해야 : 여기

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

그것의 조각은 노력하고 있습니다 :

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

관련 문제