Python 3,ast.literal_eval(node_or_string)中是否有任何已知的安全漏洞?

时间:2011-01-17 05:24:25

标签: python security abstract-syntax-tree

ast.literal_eval(node_or_string)的评估是否有任何已知的方法实际上不安全?

如果是,是否可以使用补丁?

(我已经知道PyPy [sandbox],它可能更安全,但除非答案是肯定的,否则,我的需求很小,以至于我不会那么远。)

2 个答案:

答案 0 :(得分:54)

documentation表示它是安全的,并且bug tracker中没有与literal_eval的安全性相关的错误,因此您可以认为它是安全的。

此外,according to the source,literal_eval将字符串解析为python AST(源树),并且仅当它是文字时才返回。代码永远不会执行,只会被解析,因此没有理由存在安全风险。

答案 1 :(得分:3)

>>> code = '()' * 1000000
>>> ast.literal_eval(code)
[1]    3061 segmentation fault (core dumped)  python2

或更小可能会在Python 2中因SIGSEGV而崩溃。在某些情况下,它可能是可利用的。