如何让用户(以安全的方式)编写脚本?

  • 本文关键字:方式 脚本 安全 用户 python
  • 更新时间 :
  • 英文 :


>我目前遇到一个问题,我需要编写一个函数来接收一个字典,其中所有值都是字符串或字典并输出一个字符串。问题是创建此输出字符串的逻辑。我想让用户编写逻辑。

现在,当然,我可以要求用户创建一个有效的Python脚本和一个函数。

def generate_string(input_dict):
# your logic
return "some_string"

问题是我不希望用户能够执行任意代码。特别是使用文件系统(读取/写入/删除文件(应该是不可能的。计算时间/内存使用量也应该有限制。

这可能吗?

目前,我让他们输入格式字符串。但这似乎太有限了,因为它遗漏了if陈述。

这只是一个最小的抽象示例:

def generate_string(input_dict):
if input_dict['type'] == 1:
return "I want my date in {d:%Y%m%d}".format(d=input_dict['date'])
elif input_dict['type'] == 2:
return "type is {}".format(input_dict['type'])
return "some_string"
d = {'type': 1, 'date': datetime.date(2017, 1, 14)}
generate_string(d)

Python不是一种容易锁定的语言。由于它具有强大的内省 api,因此很难(如果不是不可能的话(阻止所有系统调用。

我能想到的唯一安全方法是在单独的环境中运行脚本,例如 docker 容器或专用于运行脚本的 vm。

还有可以在沙盒模式下运行的pypy,但它仍然是一个原型,在完全可用之前可能需要做更多的工作。

在python维基上,有一个关于沙盒python的页面 https://wiki.python.org/moin/Asking%20for%20Help/How%20can%20I%20run%20an%20untrusted%20Python%20script%20safely%20%28i.e.%20Sandbox%29

PyPy 沙盒: http://pypy.org/features.html#sandboxing

另外,看看如何在纯Python中沙盒Python?它对同样的问题有一个很棒的答案。

相关内容

最新更新