Python: eval safe machen [duplizieren]
Diese Frage hat hier bereits eine Antwort:
Python eval: Ist es immer noch gefährlich, die eingebauten Funktionen und den Attributzugriff zu deaktivieren? 6 answersIch möchte eine einfache Möglichkeit, eine "Taschenrechner-API" in Python zu erstellen.
Im Moment ist mir nicht so wichtig, welche Funktionen der Taschenrechner unterstützen wird.
Ich möchte, dass es eine Zeichenfolge empfängt, sagen Sie"1+1"
und gib einen String mit dem Ergebnis zurück, in unserem Fall"2"
.
Gibt es eine Möglichkeit, @ zu macheval
sicher für so etwas?
Für den Anfang würde ich tun
env = {}
env["locals"] = None
env["globals"] = None
env["__name__"] = None
env["__file__"] = None
env["__builtins__"] = None
eval(users_str, env)
so dass der Anrufer nicht mit meinen lokalen Variablen herumspielen kann (oder sie sehen kann).
Aber ich bin sicher, dass ich hier viel beaufsichtige.
Sindeval
ie Sicherheitsprobleme von @ können behoben werden, oder gibt es einfach zu viele kleine Details, um das Problem zu beheben?