формат JSON.анализа и оценки()
мой паук чувство предупреждает меня, что с помощью eval()
для разбора входящих JSON-это плохая идея. Мне просто интересно, если JSON.parse()
- который я предполагаю, является частью JavaScript, а не специфичной для браузера функцией-более безопасен.
6 ответов:
вы более уязвимы для атак при использовании
eval
: JSON-это подмножество Javascript и json.разобрать просто парсит JSON, в то время какeval
оставил бы дверь открытой для всех выражений JS.
все
JSON.parse
реализации, скорее всего, используютeval()
JSON.parse
на основе решение Дугласа Крокфорда, который используетeval()
право на строка 497.// 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 + ')');
преимущество
JSON.parse
это то, что он проверяет, что аргумент является правильным синтаксисом JSON.
Не все браузеры имеют встроенную поддержку JSON, поэтому будут времена, когда вам нужно будет использовать
eval()
к строке JSON. Используйте парсер JSON от http://json.org как это обрабатывает все намного проще для вас.
Eval()
это зло, но против некоторых браузеров его необходимое зло, но где вы можете избежать этого, сделайте это!!!!!
Если вы разбираете JSON с
eval
, вы позволяете анализируемой строке содержать абсолютно все, поэтому вместо того, чтобы просто быть набором данных, вы можете выполнить вызовы функций или что-то еще.кроме того, в JSON,
parse
принимает aditional параметр reviver, который позволяет указать, как работать с определенными значениями, такими как datetimes (дополнительная информация и пример В встроенной документации здесь)
есть разница между тем, что JSON.parse() и eval () примут. Попробуйте eval на этом:
var x = " {\"shoppingCartName\":\ " shopping_cart: 2000\"}"
eval(x) //won't work JSON.parse(x) //does work
посмотреть этот пример.