探讨: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 相关文章推荐
基于mysql的bbs设计(五)
Oct 09 PHP
php 分页原理详解
Aug 21 PHP
Views rows style模板重写代码
May 16 PHP
ajax php传递和接收变量实现思路及代码
Dec 19 PHP
php指定函数参数默认值示例代码
Dec 04 PHP
php mail to 配置详解
Jan 16 PHP
PHP实现通过正则表达式替换回调的内容标签
Jun 15 PHP
php上传图片生成缩略图(GD库)
Jan 06 PHP
Linux安装配置php环境的方法
Jan 14 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
Jun 24 PHP
PHP magento后台无法登录问题解决方法
Nov 24 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
Apr 18 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加密解密的代码
2007/07/16 PHP
适用于初学者的简易PHP文件上传类
2015/10/29 PHP
php中preg_replace_callback函数简单用法示例
2016/07/21 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
2017/06/11 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
Javascript 写的简单进度条控件
2008/01/22 Javascript
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
javascript禁用Tab键脚本实例
2013/11/22 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
用js闭包的方法实现多点标注冒泡示例
2014/05/29 Javascript
nodejs中实现路由功能
2014/12/29 NodeJs
在JavaScript中访问字符串的子串
2015/07/07 Javascript
JavaScript验证Email(3种方法)
2015/09/21 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
详解vue axios中文文档
2017/09/12 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
微信小程序实现弹出菜单
2018/07/19 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
python访问类中docstring注释的实现方法
2015/05/04 Python
python从入门到精通(DAY 1)
2015/12/20 Python
Python解析并读取PDF文件内容的方法
2018/05/08 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
Brookstone美国官网:独特新奇产品
2017/03/04 全球购物
社区网格化管理实施方案
2014/03/21 职场文书
企业安全生产月活动总结
2014/07/05 职场文书
迎新春趣味活动方案
2014/08/24 职场文书
可怜妈妈观后感
2015/06/09 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书
了解Redis常见应用场景
2021/06/23 Redis
Redis分布式锁的7种实现
2022/04/01 Redis