在JavaScript中的模式数组中查找字符串的精确匹配[关闭]

问题描述 投票:-2回答:1

因此,我试图过滤掉XSS风险密钥模式,如下所示:

unSafePatternList = [/<\/script>/ig, /<script(.*?)>/ig, /expression\\((.*?)\\)/ig, /eval\\((.*?)\\)/ig, /javascript:/ig, /vbscript:/ig, /onload(.*?)=/ig, /src[\r\n]*=[\r\n]*\\\'(.*?)\\\'/ig, /src[\r\n]*=[\r\n]*\\\"(.*?)\\\"/ig, /alert(.*?)/ig]

我想编写一个函数,该函数接受一个字符串并在此模式数组中提供true:matchesfalse:notmatches的布尔值。我希望整个单词匹配,而不是一些。

Input: </script> : True
Input: </script>testme : false
Input: <script(.testme)> : True
javascript arrays regex xss
1个回答
0
投票

尝试一下:

function checkInput(inputVal){
    var result = false;
    var unSafePatternList = [/<\/script>$/ig, /<script(.*?)>/ig, /expression\\((.*?)\\)/ig, /eval\\((.*?)\\)/ig, /javascript:/ig, /vbscript:/ig, /onload(.*?)=/ig, /src[\r\n]*=[\r\n]*\\\'(.*?)\\\'/ig, /src[\r\n]*=[\r\n]*\\\"(.*?)\\\"/ig, /alert(.*?)/ig];

    unSafePatternList.some(function(v){
        var regex = new RegExp(v);
        if( regex.test(inputVal)){
           result = true; 
           return true;
        }
    });
    return result;
}
console.log(checkInput('</script>'));
console.log(checkInput('</script>testme'));
console.log(checkInput('<script(.testme)>'));

注意:我已将数组中的第一个模式从/ script> / ig更改为/ script> $ / ig

$符号表示字符串的结尾。

© www.soinside.com 2019 - 2024. All rights reserved.