Hi,
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
eval() ?!
hi
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?
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?
mfg
rolgal
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!
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?
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?
mfg
rolgal
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
hi leonidas,
danke für deine einschätzung, scheint wohl schwieriger zu sein als ich dachte
mfg
rolgal
danke für deine einschätzung, scheint wohl schwieriger zu sein als ich dachte
mfg
rolgal
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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
Siehe auch Restricted Execution.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
hi leonidas,
noch bin ich stur, an das habe ich in etwa gedacht:
somit habe ich doch alle module ausgeschlossen, und ich muss doch auch nicht mehr andere .py etc durchforsten oder?
mfg
rolgal
noch bin ich stur, an das habe ich in etwa gedacht:
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
>>>
mfg
rolgal
tja, aber es werden nicht alle module gelistet, so findet sich zwar os, aber nicht popen2 in der liste,
net guat
mfg
rolgal
net guat
mfg
rolgal
semmel, hat wohl irgendwas nicht funktioniert, popen2 ist schon drin.
ne, doch nicht, nur weil ich es mal importiert hatte und die anweisungen wie oben nochmal ausgeführt habe.
echt ne nuss:
vereinfacht was passiert ist:
ne, doch nicht, nur weil ich es mal importiert hatte und die anweisungen wie oben nochmal ausgeführt habe.
echt ne nuss:
vereinfacht was passiert ist:
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
Python ist einfach zu "mächtig" und flexibel. Hast Du Dir schonmal überlegt, das auch jemand folgendes machen kann:
Und schon findest Du kein 'sys' mehr. Die Zeichenkette kann man beliebig komplex "verschlüsseln".
Wenn nur Grundlegende Typen in der Liste vorkommen dann hilft vielleicht Michael Spencer's "Safe" Eval Rezept im Cookbook weiter. Das parst beliebig verschachtelte Listen, Tupel und Dictionaries mit konstanten Werten darin. Also nix ausführbares.
Code: Alles auswählen
eval('s'+'ys.exit()')
Wenn nur Grundlegende Typen in der Liste vorkommen dann hilft vielleicht Michael Spencer's "Safe" Eval Rezept im Cookbook weiter. Das parst beliebig verschachtelte Listen, Tupel und Dictionaries mit konstanten Werten darin. Also nix ausführbares.
hi blackjack,
ja, du hast natürlich völlig recht. bei deinem bsp. wäre der ganze aufwand den ich betreiben wollte umsonst.
ich komme auf solche böse ideen nicht liegt wohl daran, dass ich die unschuld in person bin
spass beiseite: das bsp das du mir empfohlen hast habe ich mir mal angesehen und bin mal zuerst gar nicht dahintergestiegen.
mal sehen, ob ich damit weiterkomme,
vielen dank auf jeden fall
mfg
rolgal
ja, du hast natürlich völlig recht. bei deinem bsp. wäre der ganze aufwand den ich betreiben wollte umsonst.
ich komme auf solche böse ideen nicht liegt wohl daran, dass ich die unschuld in person bin
spass beiseite: das bsp das du mir empfohlen hast habe ich mir mal angesehen und bin mal zuerst gar nicht dahintergestiegen.
mal sehen, ob ich damit weiterkomme,
vielen dank auf jeden fall
mfg
rolgal