0

是否可以绕过我的正则表达式并执行任何 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);

我相信是不可能的。

4

2 回答 2

2

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

查看源代码,您会发现有用的注释解释了为什么这些正则表达式会阻止执行。该代码已经经过多年的实战测试,所以我怀疑是否存在任何漏洞。

于 2013-02-06T08:39:59.203 回答
1

这个

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

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

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

于 2013-02-06T21:07:25.917 回答