原始问题:
对用户使用 eval() - 提供的输入可能是危险的。 ast 模块的 .literal_eval() 如何提供更安全的替代方案?
Eval 函数:
eval() 函数计算 Python 语句。输入可以是包含 Python 代码的字符串,eval() 返回执行该代码的结果。
Eval 的危险:
但是,eval() 可以很危险,因为它有可能执行任意代码,甚至是您不想要的代码。例如,如果用户提供如下输入:
eval("import os; os.system('rm -rf *')")
它将执行删除当前目录中所有文件的命令。
使用文字评估:
与 eval() 不同,ast.literal_eval() 函数仅计算数字文字、字符串、布尔值和字典。这使得处理用户提供的数据更加安全,因为它不会执行任意代码。例如,在提供的代码中:
datamap = ast.literal_eval(input('Provide some data here: '))
代码只会评估可以解析为字典的输入,从而防止任何潜在的安全风险。如果输入不是有效的字典,ast.literal_eval() 将引发异常。因此,在处理不受信任的输入时,ast.literal_eval() 应始终优先于 eval()。
以上是Python 安全性:什么时候应该使用 `ast.literal_eval()` 而不是 `eval()`?的详细内容。更多信息请关注PHP中文网其他相关文章!