“安全评估”真的安全吗?

2024-10-01 15:38:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一个“安全”的eval函数,来实现类似电子表格的计算(使用numpy/scipy)。在

由于明显的不可修复的安全问题,从2.3版开始,Python中已经删除了实现这一点的功能(rexec module)。有好几家第三方黑客在那里声称要这样做-我发现的最深思熟虑的解决方案是 this Python Cookbok recipe,“安全评估”。在

如果我使用这个(或类似的东西)来防止恶意代码,我是否相当安全,或者我是否一直在编写自己的解析器?有谁知道更好的选择吗?在

编辑:我刚刚发现了RestrictedPython,它是Zope的一部分。欢迎对此发表任何意见。在


Tags: 函数功能numpy解析器编辑evalrecipescipy
3条回答

虽然代码看起来相当安全,但我一直认为只要有足够的时间,任何有足够动力的人都可以破坏它。我确实认为这需要相当大的决心才能渡过难关,但我相对确信这是可以做到的。在

编写自己的解析器可能很有趣!这可能是一个更好的选择,因为人们希望在输入公式时使用熟悉的电子表格语法(Excel等),而不是Python。我对safe-eval并不熟悉,但我认为这样的事情肯定有被利用的可能。在

我想这取决于你对安全的定义。安全性很大程度上取决于传入的内容以及上下文中允许传递的内容。例如,如果传入一个文件,我可以打开任意文件:

>>> names['f'] = open('foo', 'w+')
>>> safe_eval.safe_eval("baz = type(f)('baz', 'w+')", names)
>>> names['baz']
<open file 'baz', mode 'w+' at 0x413da0>

此外,环境非常受限(不能传入模块),因此,不能简单地传入像re或random这样的实用函数模块。在

另一方面,您不需要编写自己的解析器,只需为python ast编写自己的求值器:

^{pr2}$

这样,希望你可以实施安全进口。另一个想法是使用Jython或IronPython并利用Java/.Net沙箱功能。在

相关问题 更多 >

    热门问题