[Python-de] Funktionsaufrufe

Gerhard Häring haering_python at gmx.de
Fri Mar 8 17:12:57 EST 2002


Le 08/03/02 à 16:47, Marcel Strittmatter écrivit:
> Hallo Leute
> 
> Ich habe folgendes Problem: Ich möchte einem CGI eine Variable 
> übergeben (z.B. func=save) und mein CGI soll dann die Funktion 
> save() aufrufen. Allerdings möchte ich nicht am Anfang des 
> Skripts eine lange Liste aller Funktionen erstellen müssen (if, 
> elsif, ...) , sondern möchte, dass das Skript direkt die 
> Funktion aufgrund der übergebenen Variablen ausführt.

Man *kann* das mit exec bzw. eval machen. Speziell im CGI-Bereich ist es
aber grob fahrlässig, das gedankenlos zu tun, da ein böswilliger Mensch
dir skriptgesteuert dann beliebige Funktionsaufrufe unterjubeln kann.

Man löst so etwas oft mit einem Dictionary, das die Kommandos zu
Funktionen mappt (ja, du kannst alles in ein Dictionary reinstecken,
Funktionen, Module, was das Herz beliebt).

In deinem Fall wäre IMO auch eine Positivliste von erlaubten Funktionen
in Ordnung, in etwa so:

ok_functions = ["mach_nix", "func1", "func2"] # usw.

form = cgi.FieldStorage()
command = form.getvalue("command", "mach_nix")
if command in ok_functions:
    result = eval(command)
    print result
else:
    print "Fehler: jemand wollte mir was unterjubeln!"

Gerhard
-- 
This sig powered by Python!
Außentemperatur in München: 10.3 °C      Wind: 3.9 m/s



More information about the Python-de mailing list