Разница между eval и window.json.parse для работы с responseText? - PullRequest
4 голосов
/ 11 мая 2011

У меня под рукой следующий код

var finalCompleteData = eval ("(" + jsonresponse.responseText + ")");

Когда я использовал это, я получил ошибку безопасности в Fortify, говорящую, что это может привести к взлому Javascript. Итак, я изменил его на

var finalCompleteData = window.json.parse (jsonresponse.responseText);

Для этого Fortify не показывал ошибку. Что делает метод window.json.parse?

Не могли бы вы объяснить. Заранее спасибо: -)

Ответы [ 3 ]

6 голосов
/ 11 мая 2011

eval выполнит любой код JavaScript, который он должен оценивать, и оценивает его с наивысшим уровнем безопасности. Это означает, что если ваш ответный текст возвращает не-json-код, но действительный javascript, eval выполнит его. Небо это предел с этим, он может добавлять новые функции, изменять переменные, перенаправлять страницу.

При window.json.parse будет оцениваться только json, поэтому риск ввода мошеннического кода намного меньше.

1 голос
/ 11 мая 2011

Как уже упоминалось, eval выполнит любой допустимый код JavaScript. Таким образом, следующее может вызвать предупреждение:

var jsObject = eval("alert('blah')");

По сути, вы доверяете любым данным из данного источника, что в целом небезопасно. Злоумышленник может воспользоваться преимуществами eval и выполнить вредоносный JavaScript.

JSON.parse, однако, вернется успешно только в том случае, если переданная строка является допустимой JSON:

// gives "SyntaxError: JSON.parse"
var jsObject = JSON.parse("alert('blah')");

Таким образом, он не выполняет только то, что ему дано, как eval.

1 голос
/ 11 мая 2011

eval способен запускать любой код javascript - не просто простые объекты / массивы, как это делает JSON.parse (он проверяет содержимое - проверяет json).По этой причине eval следует избегать в местах, где вы не можете гарантировать ввод.

...