探讨:web上存漏洞及原理分析、防范方法


Posted in PHP onJune 29, 2013

网站提供上存功能,是很多站点经常会有功能,商城,论坛还有常见一些网盘站点。常见互联网上面,我们也是经常听说,某某站点出现上存漏洞,某某开源项目有上存漏洞。 从互联网开始出现动态程序,上存漏洞像幽灵一样,频繁的出现在各种系统中。为什么,一个上存漏洞会这么频繁出现呢。而且,有些系统反复修补,多次还没有修补成功!其实主要问题,还是出现在上存原理上面。我们先看看,上存过程。
网站上存过程分析

<?php
header("Content-type: text/html; charset=utf-8"); 
if($_FILES)
{
 echo '<pre>';
 var_dump($_FILES);
 echo '</pre>';
}
?>
<form action="" enctype="multipart/form-data" method="POST">
<input type="file" name="txt" size="50">
<input name="Submit" type="submit" value="提交" >
</form>

以上是个简单测试例子,我们看看
探讨:web上存漏洞及原理分析、防范方法

我们来分析下:
name来自 上存时候选择文件名称
type 是文件类型, 这个类型那里来的呢?呵呵,这里非常关键的。 很多时候,很多同人会认为,这个是服务器自动判断生成的。 如果是这样想,觉得也有可能。 php 封装了上存,它自带类库好像可以的。  但是,反过来想想,你随便选择个什么格式文件,都会有格式类型。这样一想,我们推断这个值,可能也来自用户输入的。 我们来抓包看看我们类型。
探讨:web上存漏洞及原理分析、防范方法
type值 也来自,用户输入值了。
size来自程序计算上存文件大小,这个是自动计算的。 相比我们都清楚的。

你说这么多有啥样呢?
想必有朋友开始问了,我上面分析上存文件格式 ,跟开发出现漏洞有什么关联呢。 其实,我们想想,上面说的,一个文件名称name属性,以及文件类型type属性。 在我们上存文件,后端处理时候,会经常用到的。 作为开发者,在使用这2个变量,一定要继续执行“一切输入代码是有害的”原则。你在使用时候,要把它当作,跟其它get,post 获取变量一样处理。 要检测,过滤一切输入变量。
我们经常做功能是,限定用户输入必须是某种格式文件,然后保存为该格式。分析到这里,下面有很多需要继续分析地方,今天先提出大纲。接下来会分析这样常见3类上存漏洞。
1.使用用户文件名,生成文件,特殊字符过滤不严格,导致文件生成出现漏洞
2.移动文件目录时候,由于采用用户传入的文件名拼接,生成到错误目录
3.相信用户输入type 类型,直接将用户文件名保存为文件

PHP 相关文章推荐
php self,$this,const,static,-&amp;gt;的使用
Oct 22 PHP
解析PHP缓存函数的使用说明
May 10 PHP
PHP使用PDO连接ACCESS数据库
Mar 05 PHP
php目录拷贝实现方法
Jul 10 PHP
10个对初学者非常有用的PHP技巧
Apr 06 PHP
php简单实现sql防注入的方法
Apr 22 PHP
Yii2针对指定url的生成及图片等的引入方法小结
Jul 18 PHP
thinkphp实现附件上传功能
May 26 PHP
PHP getName()函数讲解
Feb 03 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 PHP
laravel框架中间件 except 和 only 的用法示例
Jul 12 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
Apr 26 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
Jun 29 #PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
Jun 29 #PHP
解析PHP中empty is_null和isset的测试
Jun 29 #PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
Jun 29 #PHP
浅析PHP中的UNICODE 编码与解码
Jun 29 #PHP
基于flush()不能按顺序输出时的解决办法
Jun 29 #PHP
解析PHP 使用curl提交json格式数据
Jun 29 #PHP
You might like
PHP+MySQL投票系统的设计和实现分享
2012/09/23 PHP
jquery的ajax()函数传值中文乱码解决方法介绍
2012/11/08 Javascript
js select option对象小结
2013/12/20 Javascript
JQuery实现动态适时改变字体颜色的方法
2015/03/10 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
dropload.js插件下拉刷新和上拉加载使用详解
2017/10/20 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
使用vue-router为每个路由配置各自的title
2018/07/30 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
VUE DOM加载后执行自定义事件的方法
2018/09/07 Javascript
VUE+elementui面包屑实现动态路由详解
2019/11/04 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
python计算圆周率pi的方法
2015/07/11 Python
python使用正则表达式匹配字符串开头并打印示例
2017/01/11 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
Python实现端口检测的方法
2018/07/24 Python
实时获取Python的print输出流方法
2019/01/07 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
python读写csv文件实例代码
2019/07/05 Python
django 前端页面如何实现显示前N条数据
2020/03/16 Python
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
优秀女职工事迹材料
2014/02/06 职场文书
餐厅总厨求职信
2014/03/04 职场文书
防灾减灾宣传标语
2014/10/07 职场文书
党员倡议书
2015/01/19 职场文书
2015年营业员工作总结
2015/04/23 职场文书
Java数组详细介绍及相关工具类
2022/04/14 Java/Android