2011-05-11 1 views
4

У меня есть следующий код в рукеРазница между eval и window.json.parse для работы с ответомText?

вар finalCompleteData = Eval ("(" + jsonresponse.responseText + ")");

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

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

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

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

ответ

6

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

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

+0

Большое спасибо за ответ. Я действительно хотел смягчить шансы ввода не-JSON в свой код. Итак, подумайте об использовании $ .parseJSON вместо window.json.parse. Это будет хорошо? –

1

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

1

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

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

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

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

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

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