46 Stimmen

Warum sollten exec() und eval() vermieden werden?

Ich habe das schon mehrfach an verschiedenen Stellen gesehen, aber nie eine befriedigende Erklärung dafür gefunden, warum das so sein sollte.

Deshalb wird hier hoffentlich eine vorgestellt werden. Warum sollten wir (zumindest im Allgemeinen) nicht exec() y eval() ?

EDIT: Ich sehe, dass die Leute davon ausgehen, dass sich diese Frage auf Webserver bezieht - das tut sie nicht. Ich kann verstehen, warum eine nicht sanitisierte Zeichenkette, die an exec könnte schlecht sein. Ist es schlecht in Nicht-Web-Anwendungen?

1 Stimmen

Können Sie einige Zitate von "mehreren Stellen" anführen, um zu klären, auf welche Bemerkungen Sie sich stützen? Es ist wichtig zu wissen, was Sie gelesen haben, um zu dem Schluss zu kommen, dass sie gemieden werden sollten. Das ist kein einfaches Thema, und Sie müssen Ihre Informationsquelle angeben, um Ihre Frage zu klären.

0 Stimmen

Soweit ich mich erinnere (da ich diese Orte im Laufe der Jahre nicht mit Lesezeichen versehen habe), haben die Warnungen in der Regel die Form von "Natürlich könnten wir eval() um dieses Problem zu lösen, aber das wäre unanständig."

0 Stimmen

Das jüngste Beispiel war wohl die Verwendung von exec() als Mittel zum Kontrollfluss innerhalb des Programms.

3voto

Jason Baker Punkte 180981

Versuchen Sie dies im interaktiven Interpreter und sehen Sie, was passiert:

>>> import sys
>>> eval('{"name" : %s}' % ("sys.exit(1)"))

Natürlich ist dies ein Einzelfall, aber es kann schwierig sein, so etwas zu verhindern.

0 Stimmen

Sie können exit() auch verwenden, ohne ein Modul importiert zu haben.

2 Stimmen

Ich weiß nicht mehr, woher sie kommt, aber exit ist keine eingebaute Funktion. Irgendwo in der Dokumentation steht, dass man sich nicht darauf verlassen sollte, dass diese Funktion existiert, außer beim interaktiven Interpreter. Das macht natürlich nicht viel aus, wenn man versucht, in ein System einzubrechen :-)

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