Python 中更安全的 eval
2021/12/9 17:21:41
本文主要是介绍Python 中更安全的 eval,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
问题
想要将一段列表形式的字符串转为 list
,但是担心这个动态的字符串可能是恶意的代码?使用 eval
将带来安全隐患。比如:
# 期望是 eval('[1, 2, 3]') # 实际上是 eval("os.popen('rm -rf *')")
解决方案
使用 ast.literal_eval
可以很好的避免这个问题,该函数可以安全执行仅包含文字的表达式字符串。支持的对象有字符串、字节、数字、元组、列表、字典、集合、 布尔值、None
和 Ellipsis
。这些是可以嵌套的,比如以字典作为元素的列表:
>>> from ast import literal_eval >>> literal_eval("[{'name': 'john', 'location': 'halo7'}]") [{'name': 'john', 'location': 'halo7'}]
注意 literal_eval
不可以执行任何复杂的表达式,比如包含运算符或是有索引的表达式都是不支持的,会直接抛出异常。这也保证了它不会执行恶意代码。
拓展
- 使用
literal_eval
时,足够复杂或是巨大的字符串可能导致 Python 解释器的崩溃,因为 Python 的 AST 编译器是有栈深限制的 literal_eval
解析异常时,可能会抛出ValueError
,TypeError
,SyntaxError
,MemoryError
或RecursionError
,这取决于传入的字符串
这篇关于Python 中更安全的 eval的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-04Python外包有哪些常见的主要库-icode9专业技术文章分享
- 2024-10-02基于深度学习的钢铁缺陷检测系统(yolov8、注意力机制、PyQt5界面、Python)
- 2024-10-01怎么用python搭建一个系统-icode9专业技术文章分享
- 2024-09-30Python基础入门教程
- 2024-09-30获取参数学习:Python中的基础教程
- 2024-09-30Python编程基础详解
- 2024-09-29点击加载学习:Python编程基础教程
- 2024-09-29数据科学五大Python前端库:第二部分
- 2024-09-27使用python 将ETH账户的资产打散
- 2024-09-26Python编程基础