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"
Как мое отображаемое имя, которое может быть получено из базы данных и не имеет жесткого кода.