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 28 Python
零基础写python爬虫之抓取百度贴吧代码分享
Nov 06 Python
Python实现从订阅源下载图片的方法
Mar 11 Python
用生成器来改写直接返回列表的函数方法
May 25 Python
python八大排序算法速度实例对比
Dec 06 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
Oct 18 Python
python多线程并发让两个LED同时亮的方法
Feb 18 Python
python文件绝对路径写法介绍(windows)
Dec 25 Python
tensorflow实现二维平面模拟三维数据教程
Feb 11 Python
python 爬虫 实现增量去重和定时爬取实例
Feb 28 Python
python之np.argmax()及对axis=0或者1的理解
Jun 02 Python
Python如何用re模块实现简易tokenizer
May 02 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文件标题及内容的方法
2014/01/16 PHP
PHP反射机制用法实例
2014/08/28 PHP
php查看网页源代码的方法
2015/03/13 PHP
php将一维数组转换为每3个连续值组成的二维数组
2016/05/06 PHP
thinkPHP5.0框架环境变量配置方法
2017/03/17 PHP
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
用Javascript实现锚点(Anchor)间平滑跳转
2009/09/08 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
js基础之DOM中document对象的常用属性方法详解
2016/10/28 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
2016/10/30 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
解决canvas画布使用fillRect()时高度出现双倍效果的问题
2017/08/03 Javascript
BetterScroll 在移动端滚动场景的应用
2017/09/18 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
2018/02/21 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
解决Js先触发失去焦点事件再执行点击事件的问题
2018/08/30 Javascript
socket io与vue-cli的结合使用的示例代码
2018/11/01 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
Vue中错误图片的处理的实现代码
2019/11/07 Javascript
Python中bisect的用法
2014/09/23 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
python 性能提升的几种方法
2016/07/15 Python
如何利用Fabric自动化你的任务
2016/10/20 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
Python 代码调试技巧示例代码
2020/08/11 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
印度民族服装购物网站:BIBA
2019/08/05 全球购物
求∏的近似值,直到最后一项的绝对值小于指定的数
2016/02/12 面试题
打架检讨书50字
2014/01/11 职场文书
服装促销活动方案
2014/02/23 职场文书
大宝sod蜜广告词
2014/03/21 职场文书
小学教师岗位职责
2015/04/02 职场文书
培训简讯范文
2015/07/20 职场文书
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android