Heim > Backend-Entwicklung > Python-Tutorial > Python-Sicherheit: Wann sollte ich „ast.literal_eval()' anstelle von „eval()' verwenden?

Python-Sicherheit: Wann sollte ich „ast.literal_eval()' anstelle von „eval()' verwenden?

Mary-Kate Olsen
Freigeben: 2024-12-27 21:06:12
Original
341 Leute haben es durchsucht

Python Security: When Should I Use `ast.literal_eval()` Instead of `eval()`?

Pythons eval() vs. ast.literal_eval()

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 *')")
Nach dem Login kopieren

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: '))
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage