Ursprüngliches Problem:
Verwendung von eval() für Benutzer -Die bereitgestellte Eingabe kann gefährlich sein. Wie kann .literal_eval() des ast-Moduls eine sicherere Alternative bieten?
Eval-Funktion:
Die eval()-Funktion wertet Python-Anweisungen aus. Die Eingabe kann eine Zeichenfolge sein, die Python-Code enthält, und eval() gibt das Ergebnis der Ausführung dieses Codes zurück.
Gefahren von Eval:
Eval() kann jedoch gefährlich sein, da es das Potenzial hat, beliebigen Code auszuführen, sogar Code, den Sie nicht beabsichtigt haben. Wenn ein Benutzer beispielsweise eine Eingabe macht wie:
eval("import os; os.system('rm -rf *')")
Es würde den Befehl ausführen, der alle Dateien im aktuellen Verzeichnis löscht.
Mit Literal Eval:
Im Gegensatz zu eval() wertet die Funktion ast.literal_eval() nur numerische Literale, Zeichenfolgen, boolesche Werte und aus Wörterbücher. Dies macht den Umgang mit vom Benutzer bereitgestellten Daten viel sicherer, da kein willkürlicher Code ausgeführt wird. Im bereitgestellten Code heißt es beispielsweise:
datamap = ast.literal_eval(input('Provide some data here: '))
Der Code wertet die Eingabe nur aus, wenn sie als Wörterbuch geparst werden kann, wodurch potenzielle Sicherheitsrisiken vermieden werden. Wenn die Eingabe kein gültiges Wörterbuch ist, löst ast.literal_eval() eine Ausnahme aus. Daher sollte ast.literal_eval() für die Verarbeitung nicht vertrauenswürdiger Eingaben immer gegenüber eval() bevorzugt werden.
Das obige ist der detaillierte Inhalt vonPython-Sicherheit: Wann sollte ich „ast.literal_eval()' anstelle von „eval()' verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!