Eval ist eine Ergänzung zur Kompilierung, die bei der Vorlage des Codes verwendet wird. Mit Vorlagen meine ich, dass Sie einen vereinfachten Vorlagengenerator schreiben, der nützlichen Vorlagencode generiert, der die Entwicklungsgeschwindigkeit erhöht.
Ich habe ein Framework geschrieben, in dem Entwickler EVAL nicht verwenden, aber sie verwenden unser Framework, und dieses Framework muss wiederum EVAL verwenden, um Vorlagen zu generieren.
Die Leistung von EVAL kann mithilfe der folgenden Methode gesteigert werden. Anstatt das Skript auszuführen, müssen Sie eine Funktion zurückgeben.
var a = eval("3 + 5");
Es sollte organisiert sein als
var f = eval("(function(a,b) { return a + b; })");
var a = f(3,5);
Das Zwischenspeichern von f wird sicherlich die Geschwindigkeit verbessern.
Auch Chrome ermöglicht das Debuggen solcher Funktionen sehr einfach.
In Bezug auf die Sicherheit wird die Verwendung von eval oder nicht kaum einen Unterschied machen.
- Zunächst ruft der Browser das gesamte Skript in einer Sandbox auf.
- Jeder Code, der in EVAL böse ist, ist im Browser selbst böse. Der Angreifer oder jeder andere kann problemlos einen Skriptknoten in DOM einfügen und alles tun, wenn er etwas bewerten kann. Wenn Sie EVAL nicht verwenden, macht dies keinen Unterschied.
- Es ist meistens eine schlechte serverseitige Sicherheit, die schädlich ist. Eine schlechte Cookie-Validierung oder eine schlechte ACL-Implementierung auf dem Server verursacht die meisten Angriffe.
- In Javas nativem Code war kürzlich eine Java-Sicherheitslücke usw. vorhanden. JavaScript wurde und wird für die Ausführung in einer Sandbox entwickelt, während Applets für die Ausführung außerhalb einer Sandbox mit Zertifikaten usw. entwickelt wurden, die zu Sicherheitslücken und vielen anderen Dingen führen.
- Das Schreiben von Code zum Imitieren eines Browsers ist nicht schwierig. Sie müssen lediglich eine HTTP-Anfrage an den Server mit Ihrer bevorzugten Benutzeragentenzeichenfolge senden. Alle Testtools verspotten ohnehin Browser. Wenn ein Angreifer Ihnen Schaden zufügen möchte, ist EVAL das letzte Mittel. Sie haben viele andere Möglichkeiten, um mit Ihrer serverseitigen Sicherheit umzugehen.
- Das Browser-DOM hat keinen Zugriff auf Dateien und keinen Benutzernamen. Tatsächlich kann nichts auf der Maschine, auf das eval zugreifen kann.
Wenn Ihre serverseitige Sicherheit solide genug ist, damit jeder von überall angreifen kann, sollten Sie sich keine Sorgen um EVAL machen. Wie bereits erwähnt, haben Angreifer unabhängig von der EVAL-Fähigkeit Ihres Browsers viele Tools, mit denen sie sich in Ihren Server hacken können, wenn EVAL nicht vorhanden wäre.
Eval eignet sich nur zum Generieren einiger Vorlagen für die Verarbeitung komplexer Zeichenfolgen, die auf etwas basieren, das nicht im Voraus verwendet wird. Zum Beispiel werde ich bevorzugen
"FirstName + ' ' + LastName"
Im Gegensatz zu
"LastName + ' ' + FirstName"
Als mein Anzeigename, der aus einer Datenbank stammen kann und der nicht fest codiert ist.