直接回答:Python的eval()
函数虽然灵活但存在严重安全隐患,推荐使用ast.literal_eval()
、JSON解析或自定义函数作为安全替代方案。这些方法能避免代码注入风险,同时满足大部分字符串转数据结构的需求。
分点解决方案
-
ast.literal_eval()
适用于安全解析字符串形式的Python基础数据结构(如列表、字典)。它仅允许字面量转换,禁止执行表达式或函数调用,例如:pythonCopy Code
import ast safe_dict = ast.literal_eval('{"key": "value"}') # 安全
-
JSON解析(
json.loads()
)
若数据格式为JSON字符串,直接使用json
模块更高效且跨语言兼容:pythonCopy Code
import json data = json.loads('{"name": "Alice"}') # 仅支持JSON标准类型
-
自定义解析函数
针对特定需求编写解析逻辑,例如通过正则匹配或字符串拆分处理简单格式:pythonCopy Code
def parse_custom(text): return {k: int(v) for k, v in (item.split(":") for item in text.split(","))}
总结提示
优先选择标准库提供的安全方法(如ast.literal_eval
),复杂场景建议结合类型检查与白名单机制,彻底规避eval()
的执行风险。