探讨: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操作文件方法问答
Mar 16 PHP
PHP strtok()函数的优点分析
Mar 02 PHP
dedecms系统的广告设置代码 基础版本
Apr 09 PHP
hessian 在PHP中的使用介绍
Dec 13 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
Jul 19 PHP
使用XHGui来测试PHP性能的教程
Jul 03 PHP
PHP异常处理Exception类
Dec 11 PHP
php头像上传预览实例代码
May 02 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
Jun 13 PHP
PHP与Perl之间知识点区别整理
Mar 19 PHP
Yii框架响应组件用法实例分析
Sep 04 PHP
laravel5.2表单验证,并显示错误信息的实例
Sep 29 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 模拟$_PUT实现代码
2010/03/15 PHP
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
Laravel中任务调度console使用方法小结
2017/05/07 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
PHP实现的回溯算法示例
2017/08/15 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
PHP获取真实IP及IP模拟方法解析
2020/11/24 PHP
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
子窗体与父窗体传值示例js代码
2013/08/01 Javascript
使用jQuery实现返回顶部
2015/01/26 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
2017/05/22 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
js+canvas实现纸牌游戏
2020/03/16 Javascript
python发布模块的步骤分享
2014/02/21 Python
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
python多线程抽象编程模型详解
2019/03/20 Python
PyCharm-错误-找不到指定文件python.exe的解决方法
2019/07/01 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
Vans(范斯)德国官网:美国南加州的原创极限运动潮牌
2017/05/02 全球购物
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
杰夫·班克斯男士服装网上商店:Jeff Banks
2019/10/24 全球购物
C++:局部变量能否和全局变量重名
2014/03/03 面试题
Android interview questions
2016/12/25 面试题
大学课外活动总结
2014/07/09 职场文书
课外科技活动总结
2014/08/27 职场文书
民事和解协议书格式
2014/11/29 职场文书
python numpy中multiply与*及matul 的区别说明
2021/05/26 Python
Python使用openpyxl批量处理数据
2021/06/23 Python
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js