Hallo, On 2012-12-08 17:40, Peter Otten wrote:
Albert Hermeling wrote:
Diese Funktion liegt als String vor und wenn ich jetzt aus dem String mit exec eine Funktion erzeuge (Instantiiere (?)) habe ich eine Funktion printer im aktuellen Namensraum. So lange ich diese Funktion nicht aufrufe, passiert nichts, rufe ich Sie auf passiert was. Ist es jetzt eigentlich möglich, das bei der Erzeugung (exec(s) genau jetzt), also noch vor dem Aufrufen der selbigen, Schadcode ausgeführt werden kann?
Ich hoffe das klingt jetzt nicht zu bizarr.
Zählt die Erzeugung von Defaultwerten?
def printer(default=print("gotcha")): ... pass ...
wobei jetzt noch subtilere Sachen möglich sind, zum Beispiel, wenn in def printer(default=x.y): ... `x` ein Objekt einer Klasse ist, bei dem `__getattribute__` definiert wurde und dieses Seiteneffekte hat. ;-) Viele Grüße Stefan