parseJSON/getJSON методы jQuery должны использоваться?

Я заметил, что jQuery parseJSON в основном делает простой regex "проверка":

parseJSON: function( data ) {
    if ( typeof data !== "string" || !data ) {
        return null;
    }

    // Make sure leading/trailing whitespace is removed (IE can't handle it)
    data = jQuery.trim( data );

    // Make sure the incoming data is actual JSON
    // Logic borrowed from http://json.org/json2.js
    if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
        .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
        .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {

        // Try to use the native JSON parser first
        return window.JSON && window.JSON.parse ?
            window.JSON.parse( data ) :
            (new Function("return " + data))();

    } else {
        jQuery.error( "Invalid JSON: " + data );
    }
},

Если это проходит ту "проверку" и если это - современный браузер используется, собственный синтаксический анализатор JSON. Иначе я принимаю для браузера как IE6, новая функция автоматически вызывается и возвращает объект.

Вопрос № 1: Так как это - просто простой тест regex, разве это не подвержено своего рода неясному использованию пограничного случая? Мы не должны действительно использовать полноценный синтаксический анализатор для браузеров, которые не поддерживают собственный JSON, анализирующий, по крайней мере?

Вопрос № 2: Насколько "более безопасный" (new Function(" return " + data ))() в противоположность eval("(" + text + ")")?

5
задан meder omuraliev 13 July 2010 в 15:42
поделиться

1 ответ

Метод JSON.parse является самым безопасным. Это определяется, когда вы включаете json2.js из http://www.json.org/js.html , и автоматически используется parseJSON / getJSON. Он анализирует, а не выполняет разметку JSON.

0
ответ дан 15 December 2019 в 06:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: