"safe_eval"真的安全吗?

9 浏览
0 Comments

"safe_eval"真的安全吗?

我正在寻找一个“安全”的eval函数,用于实现类似电子表格的计算(使用numpy/scipy)。实现这一功能的rexec模块由于明显无法修复的安全问题,在Python 2.3版本以后已被移除。目前有几个第三方的解决方案声称可以实现这一功能,而我找到的最为完善的解决方案是这个Python Cookbok中的"safe_eval"。如果我使用这个(或类似的东西),是否可以合理地避免恶意代码的攻击,或者我必须编写自己的解析器?有没有人知道是否有更好的替代方案?编辑:我刚刚发现了Zope中的RestrictedPython,这个是否可行的意见都是受欢迎的。

0
0 Comments

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

在编写解析器时,确保输入的公式不会导致安全漏洞是非常重要的。因此,出现了“Is 'safe_eval' really safe?”这个问题。

为了解决这个问题,可以考虑以下方法之一:

1. 使用现有的、经过广泛测试的解析器库,而不是自己编写解析器。这些库通常会经过严格的安全审查,并且在广泛使用中,因此更加可靠和安全。

2. 对输入的公式进行严格的验证和过滤,以确保不会执行任意代码或导致安全漏洞。例如,可以限制公式中可使用的函数和操作符,以及输入的数据类型。

3. 使用沙箱环境来执行公式,以限制其对系统的访问权限。沙箱是一种隔离的执行环境,可以限制代码的访问权限和资源使用,从而降低潜在的风险。

通过采取这些预防措施,可以提高解析器的安全性,并减少潜在的漏洞和利用可能性。因此,“Is 'safe_eval' really safe?”这个问题可以通过合理选择和使用解析器来解决。

0
0 Comments

(Is "safe_eval" really safe?)这个问题的出现的原因是由于在Python中需要对一些数据结构进行写入和读取,但不需要执行自定义代码的实际能力。因此,需要找到一个更适合的方法来实现这个目的。解决方法是使用safe_eval函数,该函数确保不执行任何代码,只对静态数据结构进行评估,例如字符串、列表、元组和字典。

0
0 Comments

"safe_eval" 是一个函数,用于评估传入的字符串作为Python代码。然而,在使用该函数时,可能会存在安全性问题。下面的内容探讨了这个问题的原因以及解决方法。

在使用"safe_eval"函数时,安全性主要取决于传入的内容和上下文中允许传入的内容。如果传入一个文件,就可以打开任意文件。这可能导致安全漏洞,因为可以执行与文件相关的操作。例如,可以通过以下代码打开一个文件:

>>> names['f'] = open('foo', 'w+')
>>> safe_eval.safe_eval("baz = type(f)('baz', 'w+')", names)
>>> names['baz']

此外,环境受到严格限制(无法传入模块),因此无法简单地传入像re或random这样的实用函数模块。

另一种解决方法是自己编写解析器,而不是使用"safe_eval"函数。可以使用Python的ast模块来解析Python代码:

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

通过这种方式,可以实现安全的导入操作。另一个想法是使用Jython或IronPython,并利用Java/.Net的沙盒能力。

"safe_eval"函数在安全性方面存在一些问题。解决这个问题的方法包括限制传入内容的类型和上下文,并考虑使用自定义解析器或其他语言的解释器来提供更安全的评估功能。

0