586 Stimmen

Warum ist die Verwendung der JavaScript eval-Funktion eine schlechte Idee?

Die eval-Funktion ist eine leistungsstarke und einfache Möglichkeit, dynamischen Code zu erzeugen.

3voto

Phi Punkte 214

Eval() ist sehr mächtig und kann verwendet werden, um eine JS-Anweisung auszuführen oder einen Ausdruck auszuwerten. Die Frage bezieht sich jedoch nicht auf die Verwendung von eval(), sondern auf den Fall, dass der String, den Sie mit eval() ausführen, von einer böswilligen Partei beeinflusst wird. Am Ende werden Sie bösartigen Code ausführen. Mit Macht kommt große Verantwortung. Verwenden Sie sie also weise, wenn Sie sie verwenden. Dies hat nicht viel mit der Funktion eval() zu tun, aber dieser Artikel enthält ziemlich gute Informationen: http://blogs.popart.com/2009/07/javascript-injection-attacks/ Wenn Sie nach den Grundlagen von eval() suchen, sehen Sie hier nach: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval

2voto

Brian Punkte 5676

Dies kann zu einem größeren Problem werden, wenn die nächste Generation von Browsern mit einer Art JavaScript-Compiler auf den Markt kommt. Code, der über Eval ausgeführt wird, funktioniert in diesen neueren Browsern möglicherweise nicht so gut wie der Rest Ihres JavaScript. Jemand sollte ein Profiling durchführen.

2voto

Matthew Crumley Punkte 98564

Abgesehen von den möglichen Sicherheitsproblemen, wenn Sie vom Benutzer eingereichten Code ausführen, gibt es in den meisten Fällen einen besseren Weg, bei dem der Code nicht bei jeder Ausführung neu geparst werden muss. Anonyme Funktionen oder Objekteigenschaften können die meisten Verwendungen von eval ersetzen und sind viel sicherer und schneller.

2voto

Ian Punkte 41

Wenn Sie möchten, dass der Benutzer einige logische Funktionen eingibt und für AND und OR auswertet, dann ist die JavaScript eval-Funktion perfekt. Ich kann zwei Zeichenketten akzeptieren und eval(uate) string1 === string2 etc.

2voto

Amr Elgarhy Punkte 62562

Dies ist einer der guten Artikel, in dem es um die Entwicklung geht und darum, dass sie kein Übel ist: http://www.nczonline.net/blog/2013/06/25/eval-isnt-evil-just-misunderstood/

Ich will damit nicht sagen, dass Sie losrennen und eval() verwenden sollen. überall zu verwenden. In der Tat gibt es nur sehr wenige gute Anwendungsfälle für die Verwendung von eval() überhaupt. Es gibt definitiv Bedenken hinsichtlich der Klarheit des Codes, Fehlersuchbarkeit und sicherlich auch der Leistung, die nicht übersehen werden sollten. Aber Sie sollten sich nicht scheuen, es zu benutzen, wenn Sie einen Fall haben, in dem eval() sinnvoll ist. Versuchen Sie erst einmal, es nicht zu benutzen, aber lassen Sie sich nicht einschüchtern dass Ihr Code anfälliger oder weniger sicher ist, wenn eval() angemessen verwendet wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X