My Spider Sense предупреждает меня, что использование eval()
для анализа входящего JSON - плохая идея. Мне просто интересно, является ли JSON.parse()
- которое, как я полагаю, является частью JavaScript, а не функцией, специфичной для браузера, - более безопасно.
javascript
json
Кевин Мейджор
источник
источник
JSON.parse
он быстрее, чемeval
, по крайней мере, в V8 (движок Chromium JS). Источник .Ответы:
Вы более уязвимы для атак, если используете
eval
: JSON - это подмножество Javascript, а json.parse просто анализирует JSONeval
, оставляя дверь открытой для всех выражений JS.источник
eval('alert(1)');
.Все
JSON.parse
реализации, скорее всего, используютeval()
JSON.parse
основан на решении Дугласа Крокфорда , которое используетсяeval()
прямо в строке 497 .Преимущество
JSON.parse
заключается в том, что он проверяет правильность синтаксиса JSON аргумента.источник
JSON.parse()
Firefox 28 и Chromium 33 в своей системе Linux Mint. Это было в 2 раза быстрее, чемeval()
в Firefox, и в 4 раза быстрее в Chromium. Я не уверен, какой исходный код вы публикуете, но в моих браузерах они разные.JSON.parse()
реализацию, которая безопаснее и быстрее, чемeval()
синтаксические анализаторы.Не все браузеры имеют встроенную поддержку JSON, поэтому будут случаи, когда вам нужно использовать
eval()
строку JSON. Используйте парсер JSON с http://json.org, так как он сделает все для вас намного проще.Eval()
это зло, но против некоторых браузеров это неизбежное зло, но если вы можете избежать этого, сделайте это !!!!!источник
Есть разница между тем, что принимают JSON.parse () и eval (). Попробуйте eval на этом:
var x = "{\" shoppingCartName \ ": \" shopping_cart: 2000 \ "}"
См. Этот пример .
источник
Если вы анализируете JSON с помощью
eval
, вы позволяете анализируемой строке содержать абсолютно все, поэтому вместо простого набора данных вы можете выполнять вызовы функций или что-то еще.Кроме того, JSON
parse
принимает дополнительный параметр, reviver, который позволяет вам указать, как работать с определенными значениями, такими как datetime (дополнительная информация и пример во встроенной документации здесь )источник
JSON - это всего лишь подмножество JavaScript. Но
eval
оценивает весь язык JavaScript, а не только подмножество JSON.источник
JSON.parse
(непосредственно реализованный в движке JavaScript) анализирует только JSON. Но другие реализации, не являющиеся исходными, выполняют некоторую проверкуeval
работоспособности, а затем используют их по соображениям производительности.