Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解析不可信代码的抽象语法树是否安全?_Python_Parsing_Abstract Syntax Tree - Fatal编程技术网

Python 解析不可信代码的抽象语法树是否安全?

Python 解析不可信代码的抽象语法树是否安全?,python,parsing,abstract-syntax-tree,Python,Parsing,Abstract Syntax Tree,是否可以使用模块以编程方式解析和修改不受信任的外部Python代码 我将只解析源代码,从源代码中获取一些信息(docstring、函数定义,也许,我不知道),然后将其留在那里,而不是编译或运行它。我相信是这样。不执行任何代码。事实上,解析ast正是ast.literal\u eval所做的,这被认为是安全的。如果您使用的是ast.parse函数,那么它应该是安全的。正如文档所述,此函数将 将源解析为AST节点。等效于编译(源代码、文件名、模式、ast.PyCF\u ONLY\u ast) 它只解

是否可以使用模块以编程方式解析和修改不受信任的外部Python代码


我将只解析源代码,从源代码中获取一些信息(docstring、函数定义,也许,我不知道),然后将其留在那里,而不是编译或运行它。

我相信是这样。不执行任何代码。事实上,解析ast正是
ast.literal\u eval
所做的,这被认为是安全的。

如果您使用的是
ast.parse
函数,那么它应该是安全的。正如文档所述,此函数将

将源解析为AST节点。等效于编译(源代码、文件名、模式、ast.PyCF\u ONLY\u ast)

它只解析文件,即使它包含无效的Python代码。它不做任何评估

如果您的目标是计算表达式,那么您可以使用
ast.literal\u eval
,这比内置的
eval
语句更安全。“不安全”意味着由您参与的工件控制的不好的事情可能会发生。由于解析只构建AST,并且(假设解析和AST构建代码中没有恶意内容),因此解析任意一段文本不会对您造成伤害

通常,为了从外部获得恶意行为,某些东西(由您控制)必须执行一些提供的代码。显然,构建解析树不会执行外部程序。但是,如果您构建了一个解释解析树并运行它的解释器,您可能会遇到问题