Python之eval()函数危险性浅析


Posted in Python onJuly 03, 2014

一般来说Python的eval()函数可以把字符串“123”变成数字类型的123,但是PP3E上说它很危险,还可以执行其他命令!

对此进行一些试验。果然,如果python写的cgi程序中如果使用eval()而非int()来转换诸如年龄这样的输入框中的内容时是非常危险的。不仅可以看见列出系统的全部文件,还可以执行删除文件,察看文件源代码等危险操作!

试着写了个程序,想把本地的脚本文件同过这样的形式一行一行的写到服务器的某个文件里,可最后失败在无法输入换行符"/n",在提交的语句里只要有换行符,就会出现EOL的出错提示,换了编码方式还是没能成功。
 
网页里有一个提交名字的窗口,这里只是以改它为例,否则名字是不会用eval函数转换的,不过年龄到是很容易出问题。这个文件(http://localhost/tutor4.html)导入了os。

line1 = "Hello, %s." % eval(form['user'].value)

(1)

os.system('del * /q') #删除当前目录下所有文件(不包括文件夹)。

os.system调用当前系统的命令(如windows)

/q
指定强制状态。不提示您确认删除。

(2)若删除文件夹,使用rmdir

/s
删除指定目录和所有子目录以及包含的所有文件。使用 /s 来删除目录树。

/q
在安静模式中运行 rmdir。不经确认即删除目录。

os.system('rmdir d:/workspace /s/q')

(3)列出所有文件os.system('dir')。因为成功执行了dir命令后,系统返回0,所以看到的返回内容只能是Hello,0.而在服务器上,倒是真的列出来了,如果有日志,可能被发现。提交os.system('dir >dir.txt'),那么访问http://localhost/dir.txt那么所有的文件和文件夹都暴露了,想看源代码吗?如果再使用os.system('type target.py').命令如果成功完成同样会返回Hello, 0.的。难道再放进一个文件,再访问那个文件吗?open('target.py').read()

由此,可以在列出和察看其他文件夹里面的内容了。

如果没干别的坏事,那么可删除dir.txt以免被人发现了。os.system('del dir.txt /q')

导入os并执行命令:

__import__('os').system('dir >dir.txt')
Python 相关文章推荐
Python字符遍历的艺术
Sep 06 Python
python中关于日期时间处理的问答集锦
Mar 08 Python
简单介绍利用TK在Python下进行GUI编程的教程
Apr 13 Python
通过源码分析Python中的切片赋值
May 08 Python
详解python列表生成式和列表生成式器区别
Mar 27 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
Jul 31 Python
Python 共享变量加锁、释放详解
Aug 28 Python
Python 装饰器原理、定义与用法详解
Dec 07 Python
keras自动编码器实现系列之卷积自动编码器操作
Jul 03 Python
Python字符串函数strip()原理及用法详解
Jul 23 Python
python 如何区分return和yield
Sep 22 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
Dec 10 Python
python的绘图工具matplotlib使用实例
Jul 03 #Python
python绘图库Matplotlib的安装
Jul 03 #Python
Python实现全局变量的两个解决方法
Jul 03 #Python
Python实现端口复用实例代码
Jul 03 #Python
在 Django/Flask 开发服务器上使用 HTTPS
Jul 03 #Python
采用python实现简单QQ单用户机器人的方法
Jul 03 #Python
centos系统升级python 2.7.3
Jul 03 #Python
You might like
如何提高MYSQL数据库的查询统计速度 select 索引应用
2007/04/11 PHP
php下将XML转换为数组
2010/01/01 PHP
php运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
php递归调用删除数组空值元素的方法
2015/04/28 PHP
深入剖析浏览器退出之后php还会继续执行么
2016/05/17 PHP
5款Javascript颜色选择器
2009/10/25 Javascript
jquery获取iframe中的dom对象(两种方法)
2013/07/02 Javascript
js跳转页面方法总结
2014/01/29 Javascript
js判断字符长度及中英文数字等
2014/03/19 Javascript
Javascript中prototype的使用详解
2016/06/18 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
vue生成文件本地打开查看效果的实例
2018/09/06 Javascript
vue.js 子组件无法获取父组件store值的解决方式
2019/11/08 Javascript
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
[05:02][DOTA2]DOTA进化论 第一期
2013/09/27 DOTA
python3图片转换二进制存入mysql
2013/12/06 Python
Python压缩和解压缩zip文件
2015/02/14 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
详解Python map函数及Python map()函数的用法
2017/11/16 Python
对python内置map和six.moves.map的区别详解
2018/12/19 Python
初探利用Python进行图文识别(OCR)
2019/02/26 Python
Python爬虫学习之获取指定网页源码
2019/07/30 Python
利用python绘制正态分布曲线
2021/01/04 Python
HTML5中的websocket实现直播功能
2018/05/21 HTML / CSS
医学专业大学生求职的自我评价
2013/11/27 职场文书
临床护理求职信
2014/04/26 职场文书
巾帼文明岗申报材料
2014/05/01 职场文书
正风肃纪剖析材料范文
2014/10/10 职场文书
董事长岗位职责
2015/02/13 职场文书
讲文明倡议书
2015/04/29 职场文书
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python
MySQL通过binlog恢复数据
2021/05/27 MySQL
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技