Python 中 eval() 的安全风险
eval() 函数有什么安全风险?为什么不建议在生产环境中使用?有什么安全的替代方案?
回答
专业代码师
eval(expression) 执行任意 Python 表达式,可以执行系统命令,存在代码注入风险。
# 危险!
user_input = "__import__('os').system('rm -rf /')"
eval(user_input)
# 即使是简单表达式也有风险
eval('1+1') # 看起来无害,但...
eval("__import__('subprocess').check_output(['ls'])")
安全替代方案:
ast.literal_eval():只安全解析字面量(字符串、数字、元组、列表、字典、布尔值、None)json.loads():解析 JSON 数据- 自己编写解析器
import ast
ast.literal_eval("[1, 2, 3]") # 安全
ast.literal_eval("__import__('os')") # 抛出 ValueError