Sicheres exec in python3
Verfasst: Samstag 13. August 2011, 12:16
Hallo!
Ist es möglich, exec halbwegs sicher auszuführen? Ich hab schon ein bisschen gegoogelt das besondere bei mir ist, dass z.b. imports einfach verboten sein können, und auch file i/o usw einfach verboten sein darf. Ich benutz das ganze in picklebuild3 (oder auf github).
Picklebuild ist ein Konfigurationswerkzeug und benutzt wieder python scripts um dort Variablen zu definieren usw. Dafür wäre es praktisch, wenn man Dinge wie das ausführen von anderen programmen, das schreiben von Datei, etc verhinden könnte. Das macht das ganze natürlich nicht bullet-proof, aber es sollte zumindest mal ein Anfang sein. Das Ziel ist natürlich schon das ganze ziemlich sicher zu bekommen.
Man sollte das eher als zusätzliches feature sehen. Am sichersten ist natürlich, jedes configure script sich durchzulesen.
Jetzt hab ich schon einiges gesehen, z.b. das hier sieht auch ganz gut aus http://code.activestate.com/recipes/496 ... safe-eval/ aber ich frag mich, ob das nicht einfacher geht... Ich hab schon ein paar Dinge probiert, aber mein Verständnis für die Art und Weise wie nachgesehen wird ob eine Name eine Objekt in __builtins__ referenziert ist mir nicht ganz klar...
Funktioniert hat z.b. ein neues modul zu schreiben, dort from builtins import * zu machen, und dann z.b. open und compile, exec usw zu überschreiben...
Aber das gefällt mir nicht so besonders. Lieber würde ich sowas wie die __getattribute__ methode überschreiben, für ein modul, und dort den Zugriff regeln.
Reicht das überhaupt aus, oder ist das dann nur eine Pseuydo-Sicherheit. Geschützt werden soll man nur vor Dateien die erstellt werden und ausgeführt werden, bzw. vor sämtlichen import Anweisungen...
Ich hoffe ich habe rübergebracht was mein Problem ist...
Schon mal danke im Voraus!
MFG Manuel
Ist es möglich, exec halbwegs sicher auszuführen? Ich hab schon ein bisschen gegoogelt das besondere bei mir ist, dass z.b. imports einfach verboten sein können, und auch file i/o usw einfach verboten sein darf. Ich benutz das ganze in picklebuild3 (oder auf github).
Picklebuild ist ein Konfigurationswerkzeug und benutzt wieder python scripts um dort Variablen zu definieren usw. Dafür wäre es praktisch, wenn man Dinge wie das ausführen von anderen programmen, das schreiben von Datei, etc verhinden könnte. Das macht das ganze natürlich nicht bullet-proof, aber es sollte zumindest mal ein Anfang sein. Das Ziel ist natürlich schon das ganze ziemlich sicher zu bekommen.
Man sollte das eher als zusätzliches feature sehen. Am sichersten ist natürlich, jedes configure script sich durchzulesen.
Jetzt hab ich schon einiges gesehen, z.b. das hier sieht auch ganz gut aus http://code.activestate.com/recipes/496 ... safe-eval/ aber ich frag mich, ob das nicht einfacher geht... Ich hab schon ein paar Dinge probiert, aber mein Verständnis für die Art und Weise wie nachgesehen wird ob eine Name eine Objekt in __builtins__ referenziert ist mir nicht ganz klar...
Funktioniert hat z.b. ein neues modul zu schreiben, dort from builtins import * zu machen, und dann z.b. open und compile, exec usw zu überschreiben...
Aber das gefällt mir nicht so besonders. Lieber würde ich sowas wie die __getattribute__ methode überschreiben, für ein modul, und dort den Zugriff regeln.
Reicht das überhaupt aus, oder ist das dann nur eine Pseuydo-Sicherheit. Geschützt werden soll man nur vor Dateien die erstellt werden und ausgeführt werden, bzw. vor sämtlichen import Anweisungen...
Ich hoffe ich habe rübergebracht was mein Problem ist...
Schon mal danke im Voraus!
MFG Manuel