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数据类型转换函数总结
Mar 11 Python
Python MySQLdb Linux下安装笔记
May 09 Python
开源Web应用框架Django图文教程
Mar 09 Python
python如何将图片转换为字符图片
Aug 19 Python
对python append 与浅拷贝的实例讲解
May 04 Python
对python程序内存泄漏调试的记录
Jun 11 Python
Pytorch Tensor的统计属性实例讲解
Dec 30 Python
pytorch: Parameter 的数据结构实例
Dec 31 Python
python 中的paramiko模块简介及安装过程
Feb 29 Python
python读取xml文件方法解析
Aug 04 Python
Python 中Operator模块的使用
Jan 30 Python
解决numpy和torch数据类型转化的问题
May 23 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
discuz程序的PHP加密函数原理分析
2011/08/05 PHP
PHP 线程安全与非线程安全版本的区别深入解析
2013/08/06 PHP
PHP使用递归生成文章树
2015/04/21 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
一个可以兼容IE FF的加为首页与加入收藏实现代码
2009/11/02 Javascript
自写的一个jQuery圆角插件
2010/10/26 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
2017/07/12 Javascript
jQuery实现仿京东防抖动菜单效果示例
2018/07/06 jQuery
jquery ajax加载数据前台渲染方式 不用for遍历的方法
2018/08/09 jQuery
javascript验证form表单数据的案例详解
2019/03/25 Javascript
基于Fixed定位的框选功能的实现代码
2019/05/13 Javascript
vue+layui实现select动态加载后台数据的例子
2019/09/20 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
python executemany的使用及注意事项
2017/03/13 Python
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
Python + selenium自动化环境搭建的完整步骤
2018/05/19 Python
用Python徒手撸一个股票回测框架搭建【推荐】
2019/08/05 Python
使用Python将字符串转换为格式化的日期时间字符串
2019/09/01 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
详解CSS3选择器:nth-child和:nth-of-type之间的差异
2017/09/18 HTML / CSS
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
德国拖鞋网站:German Slippers
2019/11/08 全球购物
小溪流的歌教学反思
2014/02/13 职场文书
市场总经理岗位职责
2014/04/11 职场文书
交通文明倡议书
2014/05/16 职场文书
入学证明
2015/06/23 职场文书
2016小学优秀教师先进事迹材料
2016/02/26 职场文书
使用css样式设计一个简单的html登陆界面的实现
2021/03/30 HTML / CSS
springBoot基于webSocket实现扫码登录
2021/06/22 Java/Android
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL
Elasticsearch 索引操作和增删改查
2022/04/19 Python
netty 实现tomcat的示例代码
2022/06/05 Servers