Оценка является злым … Поэтому, что я должен использовать вместо этого?

В конкретной ситуации, изложенной в вопросе,

typeof window.console === "undefined"

идентична

window.console === undefined

Я предпочитаю последний, поскольку он короче.

Обратите внимание, что мы ищем console только в глобальной области (которая является window объектом во всех браузерах). В этой конкретной ситуации это желательно. Мы не хотим, чтобы console был определен в другом месте.

@BrianKelley в своем большом ответе объясняет технические подробности. Я только добавил отсутствие вывода и переварил его на что-то более легкое для чтения.

20
задан karlipoppins 14 March 2009 в 19:55
поделиться

8 ответов

json.org имеет хорошее библиотека JavaScript

простое использование:

JSON.parse('[{"some":"json"}]');
JSON.stringify([{some:'json'}]);

Редактирование : Как указано в комментариях, это использует оценку при просмотре ее источника (хотя она надеется быть санированной сначала)

для предотвращения его полностью, посмотрите json_parse или , json-sans-eval

json2.js небезопасен, json_parse.js является медленным, json-sans-eval.js не проверяет

21
ответ дан 29 November 2019 в 23:41
поделиться

там стандарт, доказанный - безопасный способ сделать это?

существует предложенный стандартный способ сделать это в предстоящей версии ECMAScript 3.1 JavaScript: JSON.parse.

Это будет поддерживаться в IE8, Firefox 3.1/3.5 и скорее всего другие популярные браузеры в будущем. Тем временем можно отступить к или использовать исключительно, оценка (). Зло это может или не может быть; конечно, это будет медленнее, чем JSON.parse. Но это - обычный способ проанализировать JSON сегодня.

, Если взломщик в состоянии ввести malcious JavaScript в содержание, Вы выкладываете через JSON, у Вас есть большие проблемы для волнения о, чем eval-is-evil.

11
ответ дан 29 November 2019 в 23:41
поделиться

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

не волнуются об оценке, Но удостоверяются, что перенеслись, она в попытке... ловит блок, таким образом, Ваши пользователи не получают ошибки JS, если Ваша JSON искажается.

:)

9
ответ дан 29 November 2019 в 23:41
поделиться

Для безопасного преобразования JSON в JS возражают, что необходимо использовать синтаксический анализатор JSON, такой как JSON.parse () функция, обеспеченная эта библиотека .

2
ответ дан 29 November 2019 в 23:41
поделиться

Сравните с шаблоном разработки команды: http://en.wikipedia.org/wiki/Command_pattern . Учитывая это, можно точно определить операции, которые может выполнить клиент, и приложение будет так же безопасно как базовая интерпретация.

0
ответ дан 29 November 2019 в 23:41
поделиться

Зависит от того, что Вы пытаетесь выполнить с санитарией. У меня был прототип w/the большого успеха поддержка платформы JSON и безопасной оценки.

0
ответ дан 29 November 2019 в 23:41
поделиться

Если вы уверены, что риск инъекции отсутствует, и вы не используете eval () в цикле, тогда используйте eval () . Он будет выгодно отличаться от других вариантов, которые, безусловно, будут работать медленнее, могут выйти из строя и потребуют от клиента загрузки дополнительного кода.

0
ответ дан 29 November 2019 в 23:41
поделиться

«украдено» из jQuery

// Try to use the native JSON parser first
return window.JSON && window.JSON.parse ?
    window.JSON.parse( data ) :
    (new Function("return " + data))();
0
ответ дан 29 November 2019 в 23:41
поделиться
Другие вопросы по тегам:

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