ast.literal_eval(node_or_string)的评估是否有任何已知的方法实际上不安全?
如果是,是否可以使用补丁?
(我已经知道PyPy [sandbox],它可能更安全,但除非答案是肯定的,否则,我的需求很小,以至于我不会那么远。)
答案 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
而崩溃。在某些情况下,它可能是可利用的。