Ich weiß, dass eval
in JavaScript aus Geschwindigkeits- und Sicherheitsgründen vermieden werden sollte. Aber im Fall von PHP wird selten Sicherheit jemals erwähnt. Meistens läuft Ihr Programm langsamer, als es sollte, weil eval
willkürlich verwendet wird.
In welchen Situationen sollten Sie eval
verwenden, weil es keinen anderen Weg gibt?
Aus Gründen der Klarheit:
Wir sprechen nicht über vom Benutzer bereitgestellte Daten. Daher konzentriert sich die Frage auf die reine und vollständig kontrollierte serverseitige gültige Verwendung von eval
.
Die Sicherheitsprobleme von eval
-atisierendem Code mit eval in PHP sind die gleichen wie in Javascript: Wenn Sie einen Code auswerten, müssen Sie sicher sein, woher er kommt und was er enthält.
Die Sicherheitsimplikationen könnten sogar noch größer sein, da PHP unter anderem Zugriff auf Ihre Datenbank hat - was bedeutet, dass es fast alle Informationen, die Ihre Anwendung benötigt, stehlen / korrumpieren kann!
In Javascript sagen sie, dass "eval ist böse "; es ist wahrscheinlich in PHP so wahr, dass es in Javascript wahr ist.
Nun, zu bestimmten Situationen, in denen Sie eval
nicht vermeiden können ... Nun, in etwas wie 4 Jahren Entwicklung in PHP als meine tägliche Arbeit erinnere ich mich nicht, jemals eval
in meinem eigenen Code verwendet zu haben ^^
Immer noch, und ein Beispiel für eine Situation, in der eval
benötigt wird, wenn Sie beispielsweise Code in der Datenbank speichern und ihn nicht in Dateien zwischenspeichern (die enthalten sein könnten) - das passiert bei manchen CMS, die zum Beispiel die Eingabe von Teilen von PHP-Code in den Administrationsbereich erlauben.
Eval und create_function können eine willkürliche Code-Injektion ermöglichen. Es gibt viele Dinge in PHP, die verwendet werden können, um die Sicherheit Ihrer Anwendung zu gefährden.
Wir sagen Kindern, dass sie nicht mit Messern und Streichhölzern spielen sollen - aber diese sind nützliche (wenn nicht sogar essentielle) Werkzeuge, wenn sie richtig benutzt werden. So ist es mit viel PHP-Funktionalität. Es ist nichts an sich falsch, die Funktionalität zu verwenden, solange Sie genau wissen, was Sie tun .
Aber eine Diskussion von Programmiersprachen auf einer so abstrakten Ebene ist nicht das, worum es bei StackOverflow geht.
C.
Ich weiß, Eval sollte vermieden werden in Javascript für Geschwindigkeit und Sicherheit Gründe dafür. aber im Falle von PHP, selten wird Sicherheit jemals erwähnt. öfter läuft dein Programm langsamer als es sollte wegen zufälliger Gebrauch von eval.
eval
ist böse auch in php.
in welchen spezifischen Situationen sollten Sie benutze eval () weil es kein anderes gibt Um es herum?
Zuerst versuchen wir zu vermeiden es so viel wie möglich, aber wenn Sie dies für die Ausführung von Code verwenden müssen, dann müssen Sie damit gehen, aber wie gesagt ist es Böses benutzt du auf dein eigenes Risiko .
Untere Zeile:
Lassen Sie niemals zu, dass die Benutzereingabe mit eval
ausgeführt wird. (Es sei denn, Sie wissen, was Sie tun / riskieren)
ich stimme völlig mit früheren Antworten in dem Punkt überein, dass eval böse ist, und ich benutze es nie in meinem Code.
aber in einer Situation habe ich es nicht geschafft, Eval zu vermeiden. Ich habe nicht viel Erfahrung in PHP, also werde ich mich freuen, wenn mir jemand rät, wie ich den Code ohne "Eval" umschreiben kann. In dieser Situation hatte ich einen Klassennamen in einer Variablen gespeichert, und ich musste eine statische Methode für diese Klasse aufrufen, der Klassenname stammte von einer vertrauenswürdigen Quelle. also musste ich so etwas schreiben:
%Vor%(weil Sie nicht einfach $ className :: methodname ()) schreiben können;
Wenn Sie anonyme Funktionen vor PHP 5.3 verwenden möchten, müssen Sie create_function verwenden , die einen eval () - Aufruf umschließt.
Tags und Links php performance eval