探讨: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将数据导入到Foxmail
Oct 09 PHP
用文本文件制作留言板提示(上)
Oct 09 PHP
php操作excel文件 基于phpexcel
Jul 02 PHP
php下关于Cannot use a scalar value as an array的解决办法
Aug 08 PHP
PHP递归复制、移动目录的自定义函数分享
Nov 18 PHP
PHP数组相关函数汇总
Mar 24 PHP
WordPress开发中短代码的实现及相关函数使用技巧
Jan 05 PHP
微信公众号开发之文本消息自动回复php代码
Aug 08 PHP
PHP 序列化和反序列化函数实例详解
Jul 18 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
Oct 26 PHP
Laravel如何使用Redis共享Session
Feb 23 PHP
yii2 url重写并隐藏index.php方法
Dec 10 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或asp创建网页桌面快捷方式的代码
2010/03/23 PHP
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
[原创]php正则删除img标签的方法示例
2017/05/27 PHP
PHP实现文件上传与下载
2020/08/28 PHP
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
2017/02/20 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
Angular 容器部署的方法
2018/04/17 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
在Linux下使用Python的matplotlib绘制数据图的教程
2015/06/11 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
python抓取文件夹的所有文件
2018/02/27 Python
django 在原有表格添加或删除字段的实例
2018/05/27 Python
详解python单元测试框架unittest
2018/07/02 Python
python抖音表白程序源代码
2019/04/07 Python
Python  Django 母版和继承解析
2019/08/09 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
CSS3选择器新增问题的实现
2021/01/21 HTML / CSS
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
酒店应聘自荐信
2013/11/09 职场文书
创业培训计划书
2014/05/03 职场文书
2014年初一班主任工作总结
2014/11/08 职场文书
生日答谢词
2015/01/05 职场文书
2015年仓库工作总结
2015/04/09 职场文书
2015年招生工作总结
2015/05/04 职场文书
婚庆开业庆典主持词
2015/06/30 职场文书
Windows Server 2016 配置 IIS 的详细步骤
2022/04/28 Servers
Golang入门之计时器
2022/05/04 Golang
HTML中实现音乐或视频自动播放案例详解
2022/05/30 HTML / CSS
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技