可以绕过我的正则表达式并执行任何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);
我相信是不可能的。
答案 0 :(得分:2)
该代码是goog.json.parse
的一部分,它是Crockford的json2.js的一个分支,允许额外的空白字符。
查看source code,您会发现有用的评论,解释这些正则表达式阻止执行的原因。这段代码经过多年的战斗测试,所以我怀疑是否存在漏洞。
答案 1 :(得分:1)
此
(true");alert(9);//"
非常接近有效的javascript语句,并将绕过此正则表达式。
小心你的正则表达式,有人可以绕过它。