探讨: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 相关文章推荐
ob_start(),ob_start('ob_gzhandler')使用
Dec 25 PHP
PHP统计目录下的文件总数及代码行数(去除注释及空行)
Jan 17 PHP
php debug 安装技巧
Apr 30 PHP
30 个很棒的PHP开源CMS内容管理系统小结
Oct 14 PHP
PHP中操作ini配置文件的方法
Apr 25 PHP
PHP中fwrite与file_put_contents性能测试代码
Aug 02 PHP
php中如何使对象可以像数组一样进行foreach循环
Aug 09 PHP
php另类上传图片的方法(PHP用Socket上传图片)
Oct 30 PHP
详解PHP文件的自动加载(autoloading)
Feb 04 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
Jul 31 PHP
php实现文章评论系统
Feb 18 PHP
laravel 实现根据字段不同值做不同查询
Oct 23 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
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
php discuz 主题表和回帖表的设计
2009/03/13 PHP
php 5.3.5安装memcache注意事项小结
2011/04/12 PHP
PHP的变量总结 新手推荐
2011/04/18 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
2016/07/18 PHP
php函数mkdir实现递归创建层级目录
2016/10/27 PHP
jQuery 插件仿百度搜索框智能提示(带Value值)
2013/01/22 Javascript
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
2015/12/07 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
详解组件库的webpack构建速度优化
2018/06/18 Javascript
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
跟混乱的页面弹窗说再见
2019/04/11 Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
2019/06/24 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
2019/09/19 Javascript
vue 监听 Treeselect 选择项的改变操作
2020/08/31 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
python获取各操作系统硬件信息的方法
2015/06/03 Python
python topN 取最大的N个数或最小的N个数方法
2018/06/04 Python
python os.listdir按文件存取时间顺序列出目录的实例
2018/10/21 Python
TensorFlow加载模型时出错的解决方式
2020/02/06 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
Python pickle模块常用方法代码实例
2020/10/10 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
SmartBuyGlasses意大利:购买太阳镜、眼镜和隐形眼镜
2018/11/20 全球购物
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
文明礼仪标语
2014/06/13 职场文书
学生个人总结范文
2015/02/15 职场文书
主题班会开场白
2015/06/01 职场文书
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript