2011-12-08 50 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