ok, jetzt hab ich's. Ich hatte es so aufgefasst, als ob Du eine Liste speicherst und diese als String wieder eingelesen wird. Na denn: Problem gelöst, weil keines da!

Christian
und wie es da ist, ggg, nur ein anderes eben, macht aber nichtsok, jetzt hab ich's. Ich hatte es so aufgefasst, als ob Du eine Liste speicherst und diese als String wieder eingelesen wird. Na denn: Problem gelöst, weil keines da!
Geht nicht. Du müsstest sys.path durch alle *.py's und *.pyc's und *.pyw's auch auch alle Verzeichnisse wo eine __init__.py drin ist durchsuchen. Aber sogar das wäre nicht so grandios sicher.Vielleicht kannst du irgendwo im "imp" Modul einhaken.rolgal hat geschrieben:noch ne frage an alle, es gibt doch die möglichkeit, eine liste aller verfügbaren module zu bekommen, oder? wie geht das gleich nochmal?
Ich würde mich darauf nicht verlassen. Diese Lösung scheint mir irgendwie abenteuerlich zu sein.rolgal hat geschrieben:und wenn ja, und ich alle module ausschliesse, dann gibts wohl kein sicherheitsproblem mehr,
also würde zuerst getest werden ob [,{ usw enthalten ist, dann muss noch sicher gestellt werden, dass kein os,sys,cgi. popen, also einfach auf kein modul zugegriffen wird.
was denkt ihr?
Du bist ja nicht der erste, der sowas versucht, es gab ja schon Bastion und rexec, die beide gescheitert sind, obwohl sich durchaus fähige Leute drangesetzt haben.rolgal hat geschrieben:danke für deine einschätzung, scheint wohl schwieriger zu sein als ich dachte
Code: Alles auswählen
>>> import sys
>>> my_modules=sys.modules
>>> l="[sys.exit(1)]"
>>> l
'[sys.exit(1)]'
>>> my_modules=my_modules.keys()
>>> for element in my_modules:
if element in l:
print element, "gefunden, daher nicht erlaubt"
sys gefunden, daher nicht erlaubt
>>>
Code: Alles auswählen
>>> import sys
>>> my_modules=sys.modules
>>> my_modules=my_modules.keys()
>>> 'os' in my_modules
True
>>> 'popen2' in my_modules
False
>>> import popen2
>>> my_modules=sys.modules
>>> my_modules=my_modules.keys()
>>> 'popen2' in my_modules
True
>>>
mfg
rolgal
Code: Alles auswählen
eval('s'+'ys.exit()')