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"
Як моє відображуване ім'я, яке може надходити з бази даних і яке не є жорстким кодом.