【问题标题】:Preventing imports in Python在 Python 中防止导入
【发布时间】:2011-12-08 09:14:08
【问题描述】:

我在应用程序中嵌入了 python 作为脚本平台,因此用户可以编写 python 脚本。我试图阻止导入,因此它们无论如何都不会造成损坏,并且必须坚持提供的 API。

我想出了以下 Python 代码:

__builtins__ .__import__= None 
reload = None

这似乎可以防止导入并防止重新加载模块。需要防止重新加载,这样他们就无法重新加载内置函数,让它们返回工作导入。

但是我不是 Python 专家。用户仍然可以做些什么来导入模块?

谢谢

【问题讨论】:

  • 请看看这个question
  • 谢谢。从那篇文章中可以看出,除了导入之外,还有很多其他危险的事情,所以仅仅阻止导入可能是不够的。
  • 如果用户在他的机器上运行应用程序,让他充分利用 Python 有什么“危险”?还是您的应用会在服务器中接收来自不受信任的远程用户的脚本?
  • 我们不希望他们在文档化和预期的 API 之外导入更多我们的代码,因为他们可能会破坏应用程序或丢失数据。与人们共享脚本,结果证明它是恶意的,有点像 Word 宏中的安全漏洞。他们还可以在 Python 中使用他们认为不危险的东西,但事实证明它是危险的,并且会破坏他们的系统。如果他们选择通过独立的 Python 解释器运行那很好,这取决于他们,但这不是应用程序的问题。

标签: python scripting import


【解决方案1】:

您可能想要的是在沙箱中运行 Python。有很多方法可以做到这一点,例如 PyPy 有sandboxing support

您也可以尝试使用外部工具对 Python 进程本身进行沙盒处理,但我想这取决于操作系统。

【讨论】:

  • 感谢您提供有关沙盒的链接。我真的在寻找可以在没有 PyPy 的情况下更普遍地工作的东西。例如,我发布的代码适用于 CPython 和 IronPython。
  • 很容易破解一些东西来阻止导入,而且它们很可能总是被聪明的人覆盖。 Pypy 在其结构中以正确的方式实现沙盒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 2011-02-24
  • 2013-01-15
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多