可以绕过我的正则表达式并执行任何JavaScript?

时间:2013-02-06 07:03:47

标签: regex security scripting xss eval

可以绕过我的正则表达式并执行任何javascript吗?

function json(a){ 
    if (/^\s*$/.test(a) ? 0 : /^[\],:{}\s\u2028\u2029]*$/
        .test(a.replace(/\\["\\\/bfnrtu]/g, "@")
        .replace(/"[^"\\\n\r\u2028\u2029\x00-\x08\x0a-\x1f]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
        .replace(/(?:^|:|,)(?:[\s\u2028\u2029]*\[)+/g, ""))) 

     try{ 
         return eval("(" + a + ")") 
     } catch (b) {} 
     g(Error("Invalid JSON string: " + a)) 
}
//... 
json(window.name);

我相信是不可能的。

2 个答案:

答案 0 :(得分:2)

该代码是goog.json.parse的一部分,它是Crockford的json2.js的一个分支,允许额外的空白字符。

查看source code,您会发现有用的评论,解释这些正则表达式阻止执行的原因。这段代码经过多年的战斗测试,所以我怀疑是否存在漏洞。

答案 1 :(得分:1)

(true");alert(9);//" 

非常接近有效的javascript语句,并将绕过此正则表达式。

小心你的正则表达式,有人可以绕过它。