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 BeautifulSoup使用方法详解
Nov 21 Python
kNN算法python实现和简单数字识别的方法
Nov 18 Python
python sort、sorted高级排序技巧
Nov 21 Python
浅谈python日志的配置文件路径问题
Apr 28 Python
Django处理文件上传File Uploads的实例
May 28 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
对python中字典keys,values,items的使用详解
Feb 03 Python
Python实现微信消息防撤回功能的实例代码
Apr 29 Python
利用anaconda作为python的依赖库管理方法
Aug 13 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
Apr 07 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 Python
全网非常详细的pytest配置文件
Jul 15 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中动态HTML的输出技术
2006/10/09 PHP
PHP编码规范之注释和文件结构说明
2010/07/09 PHP
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
php中有关合并某一字段键值相同的数组合并的改进
2015/03/10 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
Web前端开发工具——bower依赖包管理工具
2016/03/29 Javascript
jquery过滤特殊字符',防sql注入的实现方法
2016/08/17 Javascript
Bootstrap源码解读媒体对象、列表组和面板(10)
2016/12/26 Javascript
移动端界面的适配
2017/01/11 Javascript
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
vue离开当前页面触发的函数代码
2020/09/01 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
利用PHP实现递归删除链表元素的方法示例
2020/10/23 Javascript
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
Python高斯消除矩阵
2019/01/02 Python
python paramiko利用sftp上传目录到远程的实例
2019/01/03 Python
python+Django+pycharm+mysql 搭建首个web项目详解
2019/11/29 Python
django 扩展user用户字段inlines方式
2020/03/30 Python
Python DES加密实现原理及实例解析
2020/07/17 Python
python属于哪种语言
2020/08/16 Python
Pycharm如何自动生成头文件注释
2020/11/14 Python
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
偷看我的初中毕业鉴定
2014/01/29 职场文书
大学毕业生自我评价
2015/03/02 职场文书
银行优秀员工推荐信
2015/03/24 职场文书
解决Oracle数据库用户密码过期
2022/05/11 Oracle