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.
('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).
('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.
sys.path
(al momento in cui il
modulo viene caricato) del codice non limitato.
('error', 'fstat', 'listdir',
'lstat', 'readlink', 'stat', 'times', 'uname', 'getpid', 'getppid',
'getcwd', 'getuid', 'getgid', 'geteuid', 'getegid')
.
('ps1',
'ps2', 'copyright', 'version', 'platform', 'exit', 'maxint')
.
(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.