探讨: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 相关文章推荐
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
Oct 09 PHP
php iconv() : Detected an illegal character in input string
Dec 05 PHP
PHP性能优化 产生高度优化代码
Jul 22 PHP
用Php编写注册后Email激活验证的实例代码
Mar 11 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
Jun 20 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
Nov 19 PHP
7个鲜为人知却非常实用的PHP函数
Jul 01 PHP
8个必备的PHP功能开发
Oct 02 PHP
php集成动态口令认证
Jul 21 PHP
PHP小偷程序的设计与实现方法详解
Oct 15 PHP
PHP用函数嵌入网站访问量计数器
Oct 27 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
Aug 19 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
phpmyadmin操作流程
2006/10/09 PHP
PHP中redis的用法深入解析
2014/02/20 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
php返回相对时间(如:20分钟前,3天前)的方法
2015/04/14 PHP
php递归遍历删除文件的方法
2015/04/17 PHP
PHP新建类问题分析及解决思路
2015/11/19 PHP
php+mysql实现的二级联动菜单效果详解
2016/05/10 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
animate.css在vue项目中的使用教程
2018/08/05 Javascript
JS实现简单的抽奖转盘效果示例
2019/02/16 Javascript
[49:31]TFT vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
用Python编程实现语音控制电脑
2014/04/01 Python
wxpython学习笔记(推荐查看)
2014/06/09 Python
python中List的sort方法指南
2014/09/01 Python
Python ldap实现登录实例代码
2016/09/30 Python
python和ruby,我选谁?
2017/09/13 Python
解决python3中解压zip文件是文件名乱码的问题
2018/03/22 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
2018/07/09 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
python脚本后台执行方式
2019/12/21 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
2020/04/22 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
在Python中实现字典反转案例
2020/12/05 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
html5 canvas手势解锁源码分享
2020/01/07 HTML / CSS
拉飞逸官网:Lafayette 148 New York
2020/07/15 全球购物
表彰先进的通报
2014/01/31 职场文书
安全月活动总结
2014/05/05 职场文书
主题班会演讲稿
2014/05/22 职场文书
期末个人总结范文
2015/02/13 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
Nginx安装配置详解
2022/06/25 Servers