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 に答える