Когда eval () в JavaScript не является злом? - PullRequest
242 голосов
/ 13 октября 2008

Я пишу некоторый код JavaScript для анализа введенных пользователем функций (для работы с таблицами). Проанализировав формулу, я может преобразовать ее в JavaScript и запустить eval() для получения результата.

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

Итак, когда можно использовать его?

Ответы [ 24 ]

0 голосов
/ 13 октября 2008

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

Итак ... когда не следует использовать eval ()? Eval () не должен использоваться, только когда есть вероятность, что третье лицо может изменить его. Например, перехватить соединение между клиентом и вашим сервером (но если это проблема, используйте HTTPS). Вы не должны использовать eval () для анализа кода, написанного другими людьми, как на форуме.

0 голосов
/ 18 мая 2012

Когда вы анализируете структуру JSON с помощью функции разбора (например, jQuery.parseJSON), она ожидает идеальную структуру файла JSON (каждое имя свойства в двойных кавычках). Тем не менее, JavaScript является более гибким. Поэтому вы можете использовать eval (), чтобы избежать этого.

0 голосов
/ 20 декабря 2008

Если это действительно нужно, eval - это не зло. Но 99,9% случаев использования eval, с которым я сталкиваюсь, это , а не (не включая setTimeout).

Для меня зло - это не производительность или даже проблема безопасности (ну, косвенно, это и то и другое). Все такие ненужные использования eval добавляют к адскому обслуживанию. Инструменты рефакторинга скинуты. Искать код сложно. Непредвиденные последствия этих уловок легион.

0 голосов
/ 15 января 2009

Я считаю, что eval - очень мощная функция для клиентских веб-приложений и безопасная ... Такая же безопасная, как и JavaScript, а это не так. :-) Проблемы безопасности, по сути, являются проблемой на стороне сервера, потому что теперь с помощью такого инструмента, как Firebug, вы можете атаковать любое приложение JavaScript.

...