探讨: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学习笔记(一) 简单了解PHP
Aug 04 PHP
PHP中上传多个文件的表单设计例子
Nov 19 PHP
PHP读取txt文本文件并分页显示的方法
Mar 11 PHP
php通过sort()函数给数组排序的方法
Mar 18 PHP
Smarty模板简单配置与使用方法示例
May 23 PHP
详解Laravel视图间共享数据与视图Composer
Aug 04 PHP
php利用递归实现删除文件目录的方法
Sep 23 PHP
PHP 信号管理知识整理汇总
Feb 19 PHP
thinkPHP5框架分页样式类完整示例
Sep 01 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
Oct 15 PHP
关于laravel 日志写入失败问题汇总
Oct 17 PHP
php7 list()、session及其他模块的修改实例分析
May 25 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的问题分析及解决
2013/05/16 PHP
php自定义函数截取汉字长度
2014/05/15 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
jquery内置验证(validate)使用方法示例(表单验证)
2013/12/04 Javascript
基于javascript实现checkbox复选框实例代码
2016/01/28 Javascript
JavaScript  event对象整理及详细介绍
2016/10/10 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
2016/12/23 Javascript
Angularjs中使用layDate日期控件示例
2017/01/11 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
浅谈vue实现数据监听的函数 Object.defineProperty
2017/06/08 Javascript
详解webpack 多入口配置
2017/06/16 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
vue+springboot图片上传和显示的示例代码
2020/02/14 Javascript
vue 自定义组件的写法与用法详解
2020/03/04 Javascript
Python中实例化class的执行顺序示例详解
2018/10/14 Python
在django-xadmin中APScheduler的启动初始化实例
2019/11/15 Python
基于Django实现日志记录报错信息
2019/12/17 Python
python如何获取apk的packagename和activity
2020/01/10 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
2020/01/20 Python
python计算导数并绘图的实例
2020/02/29 Python
CSS3自定义滚动条样式 ::webkit-scrollbar的示例代码详解
2020/06/01 HTML / CSS
html5本地存储_动力节点Java学院整理
2017/07/12 HTML / CSS
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
HTML5触摸事件演化tap事件介绍
2016/03/25 HTML / CSS
html5视频自动横过来自适应页面且点击播放功能的实现
2020/06/03 HTML / CSS
艺术系大学生毕业个人自我评价
2013/09/19 职场文书
数学系毕业生的自我评价
2014/01/10 职场文书
幼儿园美术教学反思
2014/01/31 职场文书
大学共青团员个人自我评价
2014/04/16 职场文书
生产车间管理制度
2015/08/04 职场文书
公司档案管理制度
2015/08/05 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python
浅谈Python数学建模之固定费用问题
2021/06/23 Python
一定要知道的 25 个 Vue 技巧
2021/11/02 Vue.js