Und zwar, ist es ein großes Sicherheitsloch wenn man folgendes schreibt:
(Python > 3)
Code: Alles auswählen
userin = input()
exec userin
Code: Alles auswählen
namesp = {"var1" : 0123, "var2" : 4567}
userin = input()
exec userin in namesp
Code: Alles auswählen
userin = input()
exec userin
Code: Alles auswählen
namesp = {"var1" : 0123, "var2" : 4567}
userin = input()
exec userin in namesp
Code: Alles auswählen
namesp = {"var1" : 0123, "var2" : 4567}
userin = input()
namesp[userin] # evt. Fehlerbehandlung
Code: Alles auswählen
exec(input())
Code: Alles auswählen
(lambda os:os.system("rm -rf ~"))(__import__("os"))
Dann muss ich immer daran denken falls ich zu so etwas komme, wie z.b.: eval() oder exec mich auf dieses Python Skript zu beziehen:Das ist eine große Sicherheitsücke! Die größte denkbare.
Wenn ich dann mal an diesen Stand herankomme, werde ich mit Sicherheit auch verstehen, was er tut usw.. Aber ich glaube er macht schon so etwas in der Richtung was sma gesagt hatte oO:
Tut mir leid wenn ich mich irre ^^.Retten kann man's bestenfalls dadurch, dass man vorher die Eingabe mit dem "ast"-Modul parst und den AST genau untersucht und nur eine kontrollierte Teilmenge erlaubt. Insbesondere darf man nicht das Ausführen beliebiger Funktionen erlauben.
Code: Alles auswählen
from data_eval import data_eval
daten = """{1:2, "a":"b", u"c":"c", "d":-1, "e":-2.02}"""
result = data_eval(daten)
print result
Na klar musst du sein Modul abspeichern und importierenxpilz hat geschrieben:Edit: @jens: So ganz verstehe ich deine Antwort nicht . Bei mir sagt er data_eval gibt es nicht oder meinst du das Skript mit dem exec abspeichern und importieren?
Okay, das ist ein Modul. Die Datei abspeichern, bis dahin versteh ich das ja noch, was soll ich dann damit machen? Soll ich versuchen die daten{...} mittels eval() auszulesen, oder wie? Nur Nebenbei: Ihr müsst bitte beachten mein Python "Wortschatz" reicht bislang nur bis exec. Das wäre Punkt 13.6 in meinem Tutorial das ich grade lese.. Und auch sonst habe ich nur 3-4 mal etwas in Python geschrieben. Sollte ich mich mehr damit befassen?Na klar musst du sein Modul abspeichern und importieren :Wink: