浅谈Python中eval的强大与危害


Posted in Python onMarch 13, 2019

eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的结果。想象一下变量赋值时,将等号右边的表达式写成字符串的格式,将这个字符串作为eval的参数,eval的返回值就是这个表达式的结果。

python中eval函数的用法十分的灵活,但也十分危险,安全性是其最大的缺点。本文从灵活性和危险性两方面介绍eval。

1、强大之处

举几个例子感受一下,字符串与list、tuple、dict的转化。

a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
b = eval(a)
b
Out[3]: [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
type(b)
Out[4]: list
a = "{1: 'a', 2: 'b'}"
b = eval(a)
b
Out[7]: {1: 'a', 2: 'b'}
type(b)
Out[8]: dict
a = "([1,2], [3,4], [5,6], [7,8], (9,0))"
b = eval(a)
b
Out[11]: ([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))

强大吧,给个字符串给eval,eval给你一个表达式返回值。

eval的语法格式如下:

eval(expression[, globals[, locals]])

expression : 字符串
globals : 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
locals : 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。

结合globals和locals看看几个例子
传递globals参数值为{“age”:1822},

eval("{'name':'linux','age':age}",{"age":1822})

输出结果:{‘name': ‘linux', ‘age': 1822}

再加上locals变量

age=18
eval("{'name':'linux','age':age}",{"age":1822},locals())

根据上面两个例子可以看到当locals参数为空,globals参数不为空时,查找globals参数中是否存在变量,并计算。

当两个参数都不为空时,先查找locals参数,再查找globals参数,locals参数中同名变量会覆盖globals中的变量。

2、危险之处

eval虽然方便,但是要注意安全性,可以将字符串转成表达式并执行,就可以利用执行系统命令,删除文件等操作。
假设用户恶意输入。比如:

eval("__import__('os').system('ls /Users/chunming.liu/Downloads/')")

那么eval()之后,你会发现,当前文件夹文件都会展如今用户前面。这句其实相当于执行了

os.system('ls /Users/chunming.liu/Downloads/')

那么继续输入:

eval("__import__('os').system('cat /Users/chunming.liu/Downloads/tls_asimov_cert.pem')")

代码都给人看了。
再来一条删除命令,文件消失。比如

eval("__import__('os').system('rm /Users/chunming.liu/Downloads/车辆转发测试.png')")

所以使用eval,一方面享受他的了灵活性同时,也要注意安全性。

以上所述是小编给大家介绍的Python中eval的强大与危害详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python中的tuple元组详细介绍
Feb 02 Python
Python列表append和+的区别浅析
Feb 02 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
Oct 18 Python
利用Python2下载单张图片与爬取网页图片实例代码
Dec 25 Python
Python实现计算字符串中出现次数最多的字符示例
Jan 21 Python
python实现电子书翻页小程序
Jul 23 Python
Python 项目转化为so文件实例
Dec 23 Python
pyspark 随机森林的实现
Apr 24 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
Jun 15 Python
python3处理word文档实例分析
Dec 01 Python
python机器学习实现oneR算法(以鸢尾data为例)
Mar 03 Python
Elasticsearch 数据类型及管理
Apr 19 Python
详解python中init方法和随机数方法
Mar 13 #Python
Python使用sqlalchemy模块连接数据库操作示例
Mar 13 #Python
python ---lambda匿名函数介绍
Mar 13 #Python
Python实现的列表排序、反转操作示例
Mar 13 #Python
Python实现的调用C语言函数功能简单实例
Mar 13 #Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
Mar 13 #Python
浅谈python标准库--functools.partial
Mar 13 #Python
You might like
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
PHP变量内存分配问题记录整理
2013/11/27 PHP
PHP如何实现跨域
2016/05/30 PHP
php输出图像的方法实例分析
2017/02/16 PHP
PHP 实现链式操作
2021/03/09 PHP
js 获取Listbox选择的值的代码
2010/04/15 Javascript
Javascript计算时间差的函数分享
2011/07/04 Javascript
javascript打印html内容功能的方法示例
2013/11/28 Javascript
jQuery插件slides实现无缝轮播图特效
2015/04/17 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
利用Angularjs和Bootstrap前端开发案例实战
2016/08/27 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
浅谈关于.vue文件中style的scoped属性
2017/08/19 Javascript
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
基于jQuery.i18n实现web前端的国际化
2018/05/04 jQuery
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
Python中使用logging模块打印log日志详解
2015/04/05 Python
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
python用BeautifulSoup库简单爬虫实例分析
2018/07/30 Python
python 读取摄像头数据并保存的实例
2018/08/03 Python
python创建学生管理系统
2019/11/22 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
keras读取h5文件load_weights、load代码操作
2020/06/12 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
python 如何实现遗传算法
2020/09/22 Python
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
匡威德国官网:Converse德国
2019/01/26 全球购物
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
Android面试宝典
2013/08/06 面试题
公共事业管理本科生求职信
2013/10/07 职场文书
实习老师离校感言
2014/02/03 职场文书
诚信考试倡议书
2014/04/15 职场文书
谢师宴答谢词
2015/01/05 职场文书