Possibile: forse. Fattibile: sembra improbabile. Limitare semplicemente le importazioni non renderà sicuro il sistema. Avrai bisogno di analizzare lo script e cercare elementi come exec ()
Il più grande roadblock è che è davvero difficile sapere che sei riuscito a bloccare tutte le operazioni pericolose.
Se non ti puoi fidare degli script, penso che il modo più sicuro per andare sia usare un linguaggio specificamente creato per quello che vuoi fare o creare da te. Cercare di limitare l'uso di un linguaggio generico a ciò che è noto per essere sicuro sembra un compito Sisifea. Quello che vuoi veramente è un linguaggio di espressione matematica, giusto?
Ecco un codice per darti un'idea di ciò che stai affrontando:
e = eval
g = e("glo" + "bals")
f = chr(101)
f += chr(120)
f += chr(101)
f += chr(99)
f += chr(102)
f += chr(105)
f += chr(108)
f += chr(101)
b = getattr(g()["__" + "builtins" + "__"], f)
print b
b("badstuff.py")
Se non puoi preoccuparti di eseguirlo, la stampa b mostra:
<built-in function execfile>
Questo è proprio quello che mi è venuto in mente in pochi minuti. Chiaramente è necessario limitare l'uso di globals, eval, exec, execfile ma non pretendo che questo elenco sia completo.