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监控文件或目录变化
Jun 07 Python
python实现的AES双向对称加密解密与用法分析
May 02 Python
python使用两种发邮件的方式smtp和outlook示例
Jun 02 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
Python-Tkinter Text输入内容在界面显示的实例
Jul 12 Python
python通过SSH登陆linux并操作的实现
Oct 10 Python
python超时重新请求解决方案
Oct 21 Python
解决Python列表字符不区分大小写的问题
Dec 19 Python
如何在Python 游戏中模拟引力
Mar 27 Python
Python中实现输入一个整数的案例
May 03 Python
Python如何使用ElementTree解析xml
Oct 12 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
Dec 16 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
php 来访国内外IP判断代码并实现页面跳转
2009/12/18 PHP
PHP 存储文本换行实现方法
2010/01/05 PHP
一个基于PDO的数据库操作类
2011/03/24 PHP
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
2012/05/06 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
前端开发的开始---基于面向对象的Ajax类
2010/09/17 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
JS实现从网页顶部掉下弹出层效果的方法
2015/08/06 Javascript
jQuery实现的简单百分比进度条效果示例
2016/08/01 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
canvas 弹幕效果(实例分享)
2017/01/11 Javascript
react-router4 嵌套路由的使用方法
2017/07/24 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
基于vue-cli配置lib-flexible + rem实现移动端自适应
2017/12/26 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
jQuery实现获取及设置CSS样式操作详解
2018/09/05 jQuery
[00:16]热血竞技场
2019/03/06 DOTA
解析Python中的二进制位运算符
2015/05/13 Python
Pycharm设置去除显示的波浪线方法
2018/10/28 Python
Python告诉你木马程序的键盘记录原理
2019/02/02 Python
python 用户交互输入input的4种用法详解
2019/09/24 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
详解通过变换矩阵实现canvas的缩放功能
2019/01/14 HTML / CSS
世界上最大的售后摩托车零配件超市:J&P Cycles
2017/12/08 全球购物
世界上最好的儿童品牌:AlexandAlexa
2018/01/27 全球购物
成品仓管员工作职责
2013/12/29 职场文书
大学生的网上创业计划书
2013/12/31 职场文书
2014年食堂工作总结
2014/11/20 职场文书
淘宝文案策划岗位职责
2015/04/14 职场文书
golang特有程序结构入门教程
2021/06/02 Python
使用Redis实现实时排行榜功能
2021/07/02 Redis
Pycharm远程调试和MySQL数据库授权问题
2022/03/18 MySQL