eval() 函数详解安全使用指南 · 常见误区 · 替代方案
eval() 是 Python 内置函数,用于将字符串作为 Python 表达式进行求值并返回结果。
它可以动态执行代码,但也存在严重的安全隐患。
result = eval("2 + 3 * 4") # 返回 14
eval(expression, globals=None, locals=None)
# 示例1:简单计算
print(eval("10 * (2 + 3)")) # 输出: 50
# 示例2:结合变量
x = 5
print(eval("x ** 2")) # 输出: 25
# 示例3:限制作用域(更安全)
safe_dict = {"__builtins__": {}}
print(eval("2 + 3", safe_dict)) # 输出: 5
永远不要对不可信的输入使用 eval()!
攻击者可通过构造恶意字符串执行任意代码,例如:
eval("__import__('os').system('rm -rf /')") # 危险!
即使限制了 globals 和 locals,仍可能被绕过。
ast.literal_eval():仅评估字面量(如数字、字符串、列表、字典等)。simpleeval、asteval 等。import ast
# 安全地解析字面量
data = ast.literal_eval("[1, 2, {'a': 3}]")
输入一个简单的数学表达式(如 2 + 3 * 4),点击按钮查看结果:
注意:本演示仅用于教学,实际项目中请避免使用 eval 处理用户输入。