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中使用HTMLParser解析html实例
Feb 08 Python
Python数据类型学习笔记
Jan 13 Python
Python 实现一行输入多个值的方法
Apr 21 Python
Python Pandas批量读取csv文件到dataframe的方法
Oct 08 Python
对python中的float除法和整除法的实例详解
Jul 20 Python
pycharm设置鼠标悬停查看方法设置
Jul 29 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
Feb 15 Python
Python os模块常用方法和属性总结
Feb 20 Python
Python计算IV值的示例讲解
Feb 28 Python
Selenium webdriver添加cookie实现过程详解
Aug 12 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
Dec 14 Python
python关于集合的知识案例详解
May 30 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 读取文件内容代码(txt,js等)
2009/12/06 PHP
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
PHP随机生成信用卡卡号的方法
2015/03/23 PHP
django中的ajax组件教程详解
2018/10/18 PHP
javascript 支持ie和firefox杰奇翻页函数
2008/07/22 Javascript
javascript动态加载三
2012/08/22 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
JavaScript实现网页对象拖放功能的方法
2015/04/15 Javascript
jQuery中队列queue()函数的实例教程
2016/05/03 Javascript
jquery实现点击弹出可放大居中及关闭的对话框(附demo源码下载)
2016/05/10 Javascript
HTML页面,测试JS对C函数的调用简单实例
2016/08/09 Javascript
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
JavaScript实现旋转轮播图
2020/08/18 Javascript
JS实现的全排列组合算法示例
2017/10/09 Javascript
JS实现的ajax和同源策略(实例讲解)
2017/12/01 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
2020/12/26 Vue.js
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
python3判断url链接是否为404的方法
2018/08/10 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
python SocketServer源码深入解读
2019/09/17 Python
pytorch 查看cuda 版本方式
2020/06/23 Python
浅析python中的del用法
2020/09/02 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
2021/01/24 Python
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
美国存储和组织商店:The Container Store
2017/08/16 全球购物
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
安全环保演讲稿
2014/08/28 职场文书
加强作风建设工作总结
2014/10/23 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
家长高考寄语
2015/02/27 职场文书
跑出一片天观后感
2015/06/08 职场文书
推普标语口号大全
2015/12/26 职场文书