간단하게.. 클라와 서버 사이에 JSON 표기법(<->XML)으로 작성된 수행 코드의 문자열이

네트워크  I/O하고.. 클라측에서 받아서 해당 문자열을 파싱후에 스크립트 엔진으로 구동시키

는 개념이다. EVAL()이.. 보안 문제가 걸렸을 것이다. (전달 받은 스크립트가 악성일 경우..)


// We split the second stage into 4 regexp operations in order to work around

// crippling inefficiencies in IE's and Safari's regexp engines. First we

// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we

// replace all simple value tokens with ']' characters. Third, we delete all

// open brackets that follow a colon or comma or that begin the text. Finally,

// we look to see that the remaining characters are only whitespace or ']' or

// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.


            if (/^[\],:{}\s]*$/

                    .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')

                        .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')

                        .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {


// In the third stage we use the eval function to compile the text into a

// JavaScript structure. The '{' operator is subject to a syntactic ambiguity

// in JavaScript: it can begin a block or an object literal. We wrap the text

// in parens to eliminate the ambiguity.


                j = eval('(' + text + ')');


// In the optional fourth stage, we recursively walk the new structure, passing

// each name/value pair to a reviver function for possible transformation.


                return typeof reviver === 'function'

                    ? walk({'': j}, '')

json2.js



orgjson.jar


                    : j;

            }


// If the text is not JSON parseable, then a SyntaxError is thrown.


            throw new SyntaxError('JSON.parse');

        };

    }

by givingsheart 2014. 2. 28. 16:07
| 1 |