探讨: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脚本的10个技巧(8)
Oct 09 PHP
PHP 变量的定义方法
Jan 26 PHP
php flv视频时间获取函数
Jun 29 PHP
基于xcache的配置与使用详解
Jun 18 PHP
分享下PHP register_globals 值为on与off的理解
Sep 26 PHP
php中call_user_func函数使用注意事项
Nov 21 PHP
php实现在站点里面添加邮件发送的功能
Apr 28 PHP
yii通过小物件生成view的方法
Oct 08 PHP
PHP+mysql实现从数据库获取下拉树功能示例
Jan 06 PHP
PHP fopen函数用法实例讲解
Feb 15 PHP
PHP判断是否是json字符串
Apr 01 PHP
laravel添加角色和模糊搜索功能的实现代码
Jun 22 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字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
PHP抓取及分析网页的方法详解
2016/04/26 PHP
php上传图片类及用法示例
2016/05/11 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
2016/10/17 PHP
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
学习ExtJS Column布局
2009/10/08 Javascript
jQuery 加上最后自己的验证
2009/11/04 Javascript
javascript demo 基本技巧
2009/12/18 Javascript
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
JavaScript截取指定长度字符串点击可以展开全部代码
2015/12/04 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
2016/08/10 Javascript
Bootstrap框架的学习教程详解(二)
2016/10/18 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
Python入门教程之if语句的用法
2015/05/14 Python
python简单分割文件的方法
2015/07/30 Python
Python线性回归实战分析
2018/02/01 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
python递归全排列实现方法
2018/08/18 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
婚前协议书
2014/04/15 职场文书
爱心助学感谢信
2015/01/21 职场文书
中学生社区服务活动报告
2015/02/05 职场文书
餐馆开业致辞
2015/08/01 职场文书
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers