2011-12-08 86 views
8

我將python作爲腳本平臺嵌入到應用程序中,因此用戶可以編寫python腳本。我試圖阻止進口,所以他們不會造成任何損害,並且必須堅持提供的API。防止在Python中導入

我想出了下面的Python代碼:

__builtins__ .__import__= None 
reload = None 

這似乎阻止進口和防止載入模塊。需要防止重新加載,所以他們不能重新加載buildin,從而導致他們重新加載工作。

但是我不是Python專家。還有什麼我錯過了用戶仍然可以導入模塊嗎?

謝謝

+3

請看看這個[問題](http://stackoverflow.com/q/3068139/183066)。 – jcollado

+1

謝謝。從這篇文章中突出強調,除了導入之外,還有其他很多危險的事情,所以只是防止導入可能是不夠的。 –

+0

如果用戶在他的機器上運行應用程序,那麼讓他充分利用Python可能是「危險」的?或者,您的應用程序是否會在不受信任的遠程用戶的服務器中接收腳本? – jsbueno

回答

2

你可能想要的是在沙箱中運行Python。有很多方法可以做到這一點,例如PyPy有sandboxing support

您也可以嘗試使用外部工具對Python進程本身進行沙盒處理,但我認爲這取決於操作系統。

+1

感謝有關沙盒的鏈接。我真的正在尋找一些可以在沒有PyPy的情況下更普遍地工作的東西。例如,我發佈的代碼適用於CPython和IronPython。 –

+0

爲了防止進口,很容易破解某些東西,而且它們很可能會被聰明的人所覆蓋。 Pypy在其結構中實施沙箱,做得正確。 – jsbueno