关于python:“ safe_eval”真的安全吗?

关于python:“ safe_eval”真的安全吗?

Is “safe_eval” really safe?

我正在寻找一个"安全"的评估函数,以实现类似于电子表格的计算(使用numpy / scipy)。

由于明显的无法解决的安全问题,自2.3起,已从Python中删除了执行此功能的功能(rexec模块)。 有一些第三方黑客声称可以做到这一点-我发现的最周到的解决方案是
这个Python Cookbok食谱" safe_eval"。

如果使用此命令(或类似方法)来保护自己免受恶意代码的侵害,我是否相当安全?还是我坚持编写自己的解析器? 有谁知道更好的选择吗?

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


如果您只需要用Python写下并读取一些数据结构,而不需要执行自定义代码的实际能力,那么这是一个更好的选择:
http://code.activestate.com/recipes/364469-safe-eval/

保证不执行任何代码,仅评估静态数据结构:字符串,列表,元组,字典。


我想取决于您对保险柜的定义。许多安全性取决于您传入的内容以及上下文中允许通过的内容。例如,如果传入文件,则可以打开任意文件:

1
2
3
4
>>> 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编写自己的评估器即可:

1
2
>>> import compiler
>>> ast = compiler.parse("print 'Hello world!'")

这样,希望您可以实现安全导入。另一个想法是使用Jython或IronPython并利用Java / .Net沙箱功能。


编写自己的解析器可能很有趣!这可能是一个更好的选择,因为人们希望在输入公式时使用熟悉的电子表格语法(Excel等),而不是Python。我不熟悉safe_eval,但我可以想象像这样的东西肯定有被利用的潜力。


尽管该代码看起来很安全,但我始终认为,只要有足够的时间,任何有足够动力的人都可以破坏它。我确实认为要做到这一点需要相当大的决心,但是我相对确定可以做到。


所需的功能在编译器语言服务中,请参阅
http://docs.python.org/library/language.html
如果您将应用定义为仅接受表达式,则可以将输入编译为表达式,如果不是,则获取异常,例如如果有分号或语句形式。


丹尼尔
Jinja实现了一个沙盒环境,它可能对您有用也可能没有用。据我所知,它还没有"理解"列表的理解。

Sanbox资讯


推荐阅读

    excel怎么用乘法函数

    excel怎么用乘法函数,乘法,函数,哪个,excel乘法函数怎么用?1、首先用鼠标选中要计算的单元格。2、然后选中单元格后点击左上方工具栏的fx公

    计算机主板BIOS设置详细-BIOS知识

    计算机主板BIOS设置详细-BIOS知识,,什么是电脑BIOS,一般电脑主板已经设置完毕后,电脑就开始按del键进入BIOS。系统启动BIOS,即微机的基本输入

    计算机蓝屏故障的计算机蓝屏解决方案

    计算机蓝屏故障的计算机蓝屏解决方案,,电脑蓝屏电脑故障经常使用电脑的朋友经常遇到,因为电脑蓝屏是一个非常普遍的现象,所以很难预测,什么时

    excel中乘法函数是什么?

    excel中乘法函数是什么?,乘法,函数,什么,打开表格,在C1单元格中输入“=A1*B1”乘法公式。以此类推到多个单元。1、A1*B1=C1的Excel乘法公式

    计算机自动关机的原因是什么

    计算机自动关机的原因是什么,,计算机(计算机),通常称为计算机,是一种用于高速计算的电子计算机。它可以进行数值计算和逻辑计算,还具有存储记忆

    电脑功率计算|电脑功率计算公式

    电脑功率计算|电脑功率计算公式,,电脑功率计算公式  从设计角度出发一般取300w/台基本都可以满足要求,可以从以下几个方面分析一下电脑功

    标准差excel用什么函数?

    标准差excel用什么函数?,函数,标准,什么,在数据单元格的下方输入l标准差公式函数公式“=STDEVPA(C2:C6)”。按下回车,求出标准公差值。详细

    如何设置计算机视图视图的统一视图

    如何设置计算机视图视图的统一视图,,不知道你是否有这样的使用电脑经验,电脑在不同的文件夹打开,有时这个文件夹是用来查看列表的方式,但是当

    的故障_计算机解决无法打印文档

    的故障_计算机解决无法打印文档,,核心提示:最近,打印机出现了一个奇怪的现象,在打印正常之前,打印机不能打印最近的突然,提示发送打印作业,计算

    PC计算机:AMDCPU核心细节

    PC计算机:AMDCPU核心细节,,核心提示:AthlonXP的核心型athlonxp有4种不同的核心类型,但都有个共同点:他们都使用socketa接口,他们都使用PR标称值