gpt4 book ai didi

python - 如何安全地运行不受信任的 python 代码?

转载 作者:太空宇宙 更新时间:2023-11-04 05:42:56 24 4
gpt4 key购买 nike

情况是这样的,我的网站有一些不安全的代码,这些代码是由网站用户生成的,要在我的服务器上运行。

我想禁用一些python的保留字来保护我的运行环境,比如eval, exec打印 等等。

有没有一种简单的方法(不改变python解释器,我的python版本是2.7.10)来实现我之前描述的功能?

非常感谢。

最佳答案

在 python 级别禁用名称不会有帮助,因为有很多方法可以解决它。参见 thisthis发布更多信息。这是您需要做的:

对于 CPython,使用 RestrictedPython定义 Python 的受限子集。

对于 PyPy,使用 sandboxing .它允许您在序列化所有输入/输出的特殊环境中运行任意 python 代码,因此您可以检查它并在实际运行它们之前决定允许哪些命令。

从 3.8 版开始,Python 支持 audit hooks所以你可以完全阻止某些行为:

import sys

def audit(event, args):
if event == 'compile':
sys.exit('nice try!')

sys.addaudithook(audit)

eval('5')

此外,为了保护您的主机操作系统,请使用

  • KVM 或 VirtualBox 等虚拟化(更安全)

  • 或容器化(轻得多),例如 lxddocker

在使用 docker 进行容器化的情况下,您可能需要添加 AppArmor 或 SELinux 策略以提高安全性。默认情况下,lxd 已附带 AppArmor 策略。

请确保您以尽可能少的权限以用户身份运行代码。

为每个用户重建虚拟机/容器。

无论您使用哪种解决方案,都不要忘记限制资源使用(RAM、CPU、存储、网络)。使用 cgroups如果您选择的虚拟化/容器化解决方案不支持这些类型的限制。

最后但同样重要的是,使用超时来防止用户的代码永远运行。

关于python - 如何安全地运行不受信任的 python 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33252226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com