Eval дополняет компиляцию, которая используется в шаблонах кода. Под шаблонизацией я подразумеваю, что вы пишете упрощенный генератор шаблонов, который генерирует полезный код шаблона, который увеличивает скорость разработки.
Я написал фреймворк, в котором разработчики не используют EVAL, но они используют наш фреймворк, и, в свою очередь, этот фреймворк должен использовать EVAL для генерации шаблонов.
Производительность EVAL может быть увеличена с помощью следующего метода; вместо выполнения сценария вы должны вернуть функцию.
var a = eval("3 + 5");
Это должно быть организовано как
var f = eval("(function(a,b) { return a + b; })");
var a = f(3,5);
Кеширование f, безусловно, улучшит скорость.
Также Chrome позволяет легко отлаживать такие функции.
Что касается безопасности, использование eval или нет вряд ли будет иметь значение,
- Во-первых, браузер вызывает весь сценарий в песочнице.
- Любой код, который является злом в EVAL, является злом в самом браузере. Злоумышленник или кто-либо другой может легко внедрить узел сценария в DOM и сделать что-нибудь, если он / она сможет что-либо проверить. Не использовать EVAL не будет иметь никакого значения.
- В основном это плохая защита на стороне сервера, которая вредна. Плохая проверка файлов cookie или плохая реализация ACL на сервере вызывают большинство атак.
- Недавно в нативном коде Java была уязвимость Java и т. Д. JavaScript был и предназначен для работы в песочнице, тогда как апплеты были разработаны для работы вне песочницы с сертификатами и т. Д., Которые приводят к уязвимостям и многим другим.
- Написание кода для имитации браузера не сложно. Все, что вам нужно сделать, это сделать HTTP-запрос к серверу с вашей любимой строкой агента пользователя. Все инструменты тестирования в любом случае имитируют браузеры; если злоумышленник хочет причинить вам вред, EVAL является их последним средством. У них есть много других способов справиться с вашей безопасностью на стороне сервера.
- DOM браузера не имеет доступа к файлам и не имеет имени пользователя. Фактически ничто на машине, которой eval не может дать доступ.
Если ваша серверная безопасность достаточно надежна, чтобы кто-то мог атаковать откуда угодно, вам не стоит беспокоиться о EVAL. Как я уже упоминал, если EVAL не существует, у злоумышленников есть много инструментов для взлома вашего сервера независимо от возможностей EVAL вашего браузера.
Eval хорош только для генерации некоторых шаблонов для выполнения сложной обработки строк на основе чего-то, что не используется заранее. Например, я предпочту
"FirstName + ' ' + LastName"
В отличие от
"LastName + ' ' + FirstName"
Как мое отображаемое имя, которое может исходить из базы данных и не является жестко закодированным.