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导入txt数据到mysql的方法
Apr 08 Python
各个系统下的Python解释器相关安装方法
Oct 12 Python
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
Python读取word文本操作详解
Jan 22 Python
python3获取当前文件的上一级目录实例
Apr 26 Python
django开发post接口简单案例,获取参数值的方法
Dec 11 Python
django模板加载静态文件的方法步骤
Mar 01 Python
python按修改时间顺序排列文件的实例代码
Jul 25 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
Nov 22 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
IntelliJ 中配置 Anaconda的过程图解
Jun 01 Python
Python绘制散点图之可视化神器pyecharts
Jul 07 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 4.2书写安全的脚本
2006/10/09 PHP
玩转虚拟域名◎+ .
2006/10/09 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
php while循环控制的简单实例
2016/05/30 PHP
PHP count_chars()函数讲解
2019/02/14 PHP
用js实现上传图片前的预览(TX的面试题)
2007/08/14 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
2014/05/08 Javascript
input:checkbox多选框实现单选效果跟radio一样
2014/06/16 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
zTree插件下拉树使用入门教程
2016/04/11 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
如何利用ES6进行Promise封装总结
2019/02/11 Javascript
自定义Vue组件打包、发布到npm及使用教程
2019/05/22 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
Vue.js原理分析之nextTick实现详解
2020/09/07 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
python两种遍历字典(dict)的方法比较
2014/05/29 Python
详解Python if-elif-else知识点
2018/06/11 Python
简单了解python的break、continue、pass
2019/07/08 Python
运行Python编写的程序方法实例
2020/10/21 Python
Python hashlib和hmac模块使用方法解析
2020/12/08 Python
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
用C#语言写出在本地创建一个UDP接收端口的具体过程
2016/02/22 面试题
幼儿园毕业园长感言
2014/02/24 职场文书
党的群众路线教育实践活动整改方案
2014/10/28 职场文书
困难补助申请报告
2015/05/19 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
《浅水洼里的小鱼》教学反思
2016/02/16 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书
开发者首先否认《遗弃》被取消的传言
2022/04/11 其他游戏