17.1 rexec -- Infrastruttura per l'esecuzione limitata

Modificato nella versione 2.3: Disabled module.

La documentazione � stata lasciata per aiutare nella lettura di vecchio codice che utilizza questo modulo.

Questo modulo contiene la classe RExec, che supporta i metodi r_eval(), r_execfile(), r_exec() e r_import(), che sono versioni limitate delle funzioni standard Python eval(), execfile() e delle istruzioni exec ed import. Il codice eseguito in questo ambiente limitato avr� accesso solamente ai moduli ed alle funzioni che vengono considerate sicure; potete derivare RExec per aggiungere o rimuovere le funzionalit� che desiderate.

Anche se il modulo rexec � disegnato per comportarsi come descritto sotto, esso possiede alcune vulnerabilit� note che potrebbero venire sfruttate da codice scritto a proposito. Perci� non dovreste farvi affidamento in situazioni che richiedono sicurezza ``pronta per la produzione''. In queste situazioni, pu� essere necessaria l'esecuzione tramite sotto processi o un attento ``cleansing'' di entrambi i codici e dei dati da elaborare . Alternativamente, sar� molto apprezzato l'aiuto nel correggere le vulnerabilit� note di rexec.

Note: La classe RExec pu� impedire che il codice effettui operazioni non sicure come leggere o scrivere file su disco o utilizzare socket TCP/IP. Comunque, non protegge da codice che utilizza grandi quantit� di memoria o tempo del processore.

class RExec( [hooks[, verbose]])
Restituisce un'istanza della classe RExec.

hooks � un'istanza della classe RHooks o di una sua sotto classe. Se viene omessa o � None, viene istanziata la classe predefinita RHooks. Ogni volta che il modulo rexec cerca un modulo (anche uno built-in) o legge il codice di un modulo, non utilizza realmente il file system da s�. Piuttosto, richiama i metodi di un'istanza RHooks che � stata passata al costruttore o creata da questo. (In realt� l'oggetto RExec non effettua queste chiamate -- queste vengono eseguite da un oggetto loader a livello di modulo che � parte dell'oggetto RExec. Questo permette un diverso livello di flessibilit�, che pu� essere utile quando si cambia il meccanismo di import in un ambiente limitato).

Fornento un oggetto RHooks alternativo, possiamo controllare gli accessi al file system effettuati per importare un modulo, senza modificare il vero algoritmo che controlla l'ordine in cui questi accessi vengono effettuati. Per esempio, potete sostituire un oggetto RHooks che passa tutte le richieste del filesystem ad un file server, attraverso qualche meccanismo RPC, come ILU. Il loader delle applet di Grail utilizza questo tecnica per supportare l'import delle applet da un URL per una directory.

Se verbose � vero, vengono generate informazioni addizionali di debug sullo standard output.

È importante sapere che il codice in esecuzione in un ambiente limitato pu� ancora chiamare la funzione sys.exit(). Per non permettere al codice limitato di terminare l'interprete, proteggete sempre le chiamate che eseguono codice limitato con un'istruzione try/except che intercetti l'eccezione SystemExit. Rimuovere la funzione sys.exit() dall'ambiente limitato non � sufficiente - il codice limitato pu� ancora usare raise SystemExit. Rimuovere SystemExit non � un'opzione ragionevole; alcuni codici di libreria ne fanno uso e non funzionerebbero senza.

Vedete anche:

Grail Home Page
Grail � un browser web scritto interamente in Python. Utilizza il modulo rexec come base per supportare applet Python e pu� essere visionato come esempio di utilizzo di questo modulo.



Subsections
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.