17.1.2 Definire gli ambienti limitati

La classe RExec possiede i seguenti attributi di classe, che vengono utilizzati dal metodo __init__(). La modifica di questi attributi su un'istanza esistente non causa alcun effetto; create invece una sotto classe di RExec ed assegnate nuovi valori nella definizione della classe. Le istanze delle nuove classi utilizzeranno i nuovi valori. Tutti questi attributi sono tuple o stringhe.

nok_builtin_names
Contiene i nomi delle funzioni built-in che non saranno disponibili ai programmi in esecuzione nell'ambiente limitato. Il valore per RExec è ('open', 'reload', '__import__'). (Questo fornisce le eccezioni, poiché la maggioranza delle funzioni built-in sono potenzialmente dannose. Una sotto classe che vuole sovrascrivere questa variabile dovrebbe probabilmente iniziare con il valore della classe base e concatenare funzioni proibite addizionali - quando nuove funzioni built-in pericolose verranno aggiunte a Python, verranno aggiunte anche a questo modulo).

ok_builtin_modules
Contiene i nomi dei moduli built-in che possono venire importati in modo sicuro. Il valore per RExec è ('audioop', 'array', 'binascii', 'cmath', 'errno', 'imageop', 'marshal', 'math', 'md5', 'operator', 'parser', 'regex', 'rotor', 'select', 'sha', '_sre', 'strop', 'struct', 'time'). Si applica una nota simile circa la sovrascrittura di queste variabili -- utilizzate il valore della classe base come punto di partenza.

ok_path
Contiene le directory in cui si andrà a cercare quando viene effettuato un import nell'ambiente limitato. Il valore per RExec è lo stesso di sys.path (al momento in cui il modulo viene caricato) del codice non limitato.

ok_posix_names
Contiene i nomi delle funzioni nel modulo os che saranno disponibili ai programmi in esecuzione nell'ambiente limitato. Il valore per RExec è ('error', 'fstat', 'listdir', 'lstat', 'readlink', 'stat', 'times', 'uname', 'getpid', 'getppid', 'getcwd', 'getuid', 'getgid', 'geteuid', 'getegid').

ok_sys_names
Contiene i nomi delle funzioni e delle variabili nel modulo sys che saranno disponibili ai programmi in esecuzione nell'ambiente limitato. Il valore per RExec è ('ps1', 'ps2', 'copyright', 'version', 'platform', 'exit', 'maxint').

ok_file_types
Contiene i tipi di file dai quali è permesso caricare i moduli. Ogni tipo di file è una costante intera definita nel modulo imp. I valori più significativi sono PY_SOURCE, PY_COMPILED e C_EXTENSION. Il valore per RExec è (C_EXTENSION, PY_SOURCE). Non è consigliabile aggiungere PY_COMPILED in una sotto classe; un attaccante potrebbe uscire dalla modalità di esecuzione limitata mettendo un file byte-compilato (.pyc) forgiato dovunque nel file system, per esempio scrivendolo in /tmp o caricandolo nella directory /incoming del vostro server FTP pubblico.

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