Eval jest komplementarny do kompilacji używanej do tworzenia szablonów kodu. Przez szablonowanie mam na myśli, że piszesz uproszczony generator szablonów, który generuje użyteczny kod szablonu, który zwiększa szybkość programowania.
Napisałem framework, w którym programiści nie używają EVAL, ale używają naszego frameworka, który z kolei musi używać EVAL do generowania szablonów.
Wydajność EVAL można zwiększyć, stosując następującą metodę; zamiast wykonywać skrypt, musisz zwrócić funkcję.
var a = eval("3 + 5");
Powinien być zorganizowany jako
var f = eval("(function(a,b) { return a + b; })");
var a = f(3,5);
Buforowanie f z pewnością poprawi prędkość.
Również Chrome pozwala bardzo łatwo debugować takie funkcje.
Jeśli chodzi o bezpieczeństwo, użycie eval lub nie ma większego znaczenia,
- Przede wszystkim przeglądarka wywołuje cały skrypt w piaskownicy.
- Każdy kod, który jest zły w EVAL, jest zły w samej przeglądarce. Osoba atakująca lub ktokolwiek może łatwo wstrzyknąć węzeł skryptu do DOM i zrobić wszystko, jeśli będzie w stanie coś sprawdzić. Nie użycie EVAL nie zrobi żadnej różnicy.
- Szkodliwe są głównie słabe zabezpieczenia po stronie serwera. Słaba walidacja plików cookie lub słaba implementacja ACL na serwerze powoduje większość ataków.
- Niedawna luka w Javie itp. Występowała w natywnym kodzie Java. JavaScript był i jest przeznaczony do działania w piaskownicy, podczas gdy aplety zostały zaprojektowane do działania poza piaskownicą z certyfikatami itp., Które prowadzą do luk w zabezpieczeniach i wielu innych rzeczy.
- Pisanie kodu do naśladowania przeglądarki nie jest trudne. Wszystko, co musisz zrobić, to wysłać żądanie HTTP do serwera za pomocą ulubionego ciągu agenta użytkownika. Wszystkie narzędzia testujące i tak wyśmiewają przeglądarki; jeśli atakujący chce cię skrzywdzić, EVAL jest ostatecznością. Mają wiele innych sposobów radzenia sobie z bezpieczeństwem po stronie serwera.
- DOM przeglądarki nie ma dostępu do plików ani nazwy użytkownika. W rzeczywistości nic na maszynie, do którego eval nie może uzyskać dostępu.
Jeśli twoje zabezpieczenia po stronie serwera są wystarczająco solidne, aby ktokolwiek mógł zaatakować z dowolnego miejsca, nie powinieneś się martwić EVAL. Jak już wspomniałem, gdyby EVAL nie istniał, osoby atakujące mają wiele narzędzi do włamania się na Twój serwer, niezależnie od możliwości EVAL twojej przeglądarki.
Eval nadaje się tylko do generowania niektórych szablonów do wykonywania złożonego przetwarzania ciągów w oparciu o coś, co nie jest wcześniej używane. Na przykład wolę
"FirstName + ' ' + LastName"
W przeciwieństwie do
"LastName + ' ' + FirstName"
Jako moja nazwa wyświetlana, która może pochodzić z bazy danych i która nie jest zakodowana na stałe.