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 answers

Ich 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.

Sindevalie Sicherheitsprobleme von @ können behoben werden, oder gibt es einfach zu viele kleine Details, um das Problem zu beheben?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage