2011-12-08 1 views
8

Ho python incorporato in un'applicazione come piattaforma di script in modo che gli utenti possano scrivere script Python. Sto cercando di impedire le importazioni in modo che non possano causare danni in ogni caso e devono attenersi all'API fornita.Prevenzione delle importazioni in Python

ho fornito con il seguente codice Python:

__builtins__ .__import__= None 
reload = None 

Questo sembra impedire importazioni e previene ricarico dei moduli. La prevenzione del ricaricamento è necessaria in modo che non possano ricaricare i buildins restituendo un'importazione funzionante.

Tuttavia, non sono un esperto Python. C'è qualcos'altro che mi manca che l'utente possa ancora fare per importare i moduli?

Grazie

+3

Si prega di dare un'occhiata a questa [domanda] (http://stackoverflow.com/q/3068139/183066). – jcollado

+1

Grazie. Da quel post è emerso che ci sono davvero molte altre cose pericolose oltre all'importazione, quindi impedire l'importazione probabilmente non è sufficiente. –

+0

Se l'utente sta eseguendo un'applicazione sulla sua machinne, cosa può essere "pericoloso" nel consentirgli di sfruttare appieno Python? O la tua app riceverà script in un server, da utenti remoti non fidati? – jsbueno

risposta

2

Quello che probabilmente si desidera è eseguire Python in una sandbox. Esistono diversi modi per farlo, ad esempio PyPy ha sandboxing support.

Si potrebbe anche provare il sandboxing del processo Python stesso utilizzando strumenti esterni, ma suppongo che questo dipenda dal sistema operativo.

+1

Grazie per il link sulla sandboxing. Stavo davvero cercando qualcosa che avrebbe funzionato più in generale senza PyPy. Ad esempio, il codice che ho postato funziona sia su CPython che su IronPython. –

+0

È facile hackerare qualcosa per impedire le importazioni, e probabilmente saranno sempre sostituibili da persone intelligenti. Pypy implementa sandboxing nella sua struttura, fatto nel modo giusto. – jsbueno