PHP上传漏洞的分析和解决方案
来源:互联网 发布:拓普集团 知乎 编辑:程序博客网 时间:2024/06/13 04:02
导读:这个话题,其实很多安全网站都在说,也没有什么高深的内容,归纳,规整纳为己用。
详细:
主要是抓包伪造的漏洞。
L1 没有做file_type校验,直接转存”用户“上传文件;(恶劣的后端校验)
L2 使用PHP预定义变量$_FILES的type属性做校验;(可以对数据进行伪造)
L3 使用Fileinfo扩展(PHP5.3后就默认安装了)进行校验。(我所知较安全的方案)
在上传文件时候,除了大小做常规校验外,还需要对类型做校验——不管是图片、文档类型等等。而更加安全的做法,可以采用强制重命名,类似QQ的离线的做法。这里的重命名,对于PHP来说,tmp_name 已经重命名了,增加后缀名即可。
上代码:
<?php// 面向过程$file_info = file_info_open(FILEINFO_MIME_TYPE); $filename = 'aa.png';echo file_info_file($file_info, $filename);file_info_close($file_info);// 面向对象$filename = 'aa.png';$file_info = new file_info(FILEINFO_MIME);$type = $file_info->file($filename);$mime = substr($type, 0, strpos($type, ';'));echo $mime;
好了。
如果当前生产环境不是php5.3呢,这里提供之前一位同事的办法:
/* * 处理原理:对图片类型进行简单的检测,并以原图进行重新生成(重新生成会打乱其中的恶意代码) * 处理方法(用此方法替换move_uploaded_file): * 进行简单图片判断并上传(jpg,gif,png) * @param $file $_FILES['']获取的值 ; $path 图片生成的物理路径(包含图片名称) * return 上传成功 true ; 图片类型异常 -1 ;上传失败 false; */function image_save($file, $path) { if ($file["type"] == "image/gif") { @$im = imagecreatefromgif($file['tmp_name']); if ($im) { $sign = imagegif($im, $path); } else { return -1; } } elseif ($file["type"] == "image/png" || $file["type"] == "image/x-png") { @$im = imagecreatefrompng($file['tmp_name']); if ($im) { $sign = imagepng($im, $path); } else { return -1; } } else { @$im = imagecreatefromjpeg($file['tmp_name']); if ($im) { $sign = imagejpeg($im, $path, 100); } else { return -1; } } return $sign;}原文地址:http://alfred-long.iteye.com/blog/1725628
感谢 i飞行的部落 。
- PHP上传漏洞的分析和解决方案
- PHP 文件上传实现及漏洞分析
- Struts2高危漏洞分析和解决方案
- [PHP] EDBID:36372中上传漏洞源代码分析
- ASP上传漏洞终极解决方案
- PHP程序的常见漏洞攻击分析
- PHP程序的常见漏洞攻击分析
- PHP程序的常见漏洞攻击分析
- PHP程序的常见漏洞攻击分析
- PHP程序的常见漏洞攻击分析
- PHP程序的常见漏洞攻击分析
- PHP/ASP上传漏洞探究
- PHP/ASP上传漏洞探究
- PHP/ASP上传漏洞探究
- PHP任意文件上传漏洞
- PHP文件包含漏洞原理分析和利用方法
- PHP文件包含漏洞原理分析和利用方法
- PHP文件包含漏洞原理分析和利用方法
- 如何做人和怎样做事
- android中修改string.xml中变量
- a.html
- AIX命令参考大全,卷 4,n - r
- Google的jQuery库
- PHP上传漏洞的分析和解决方案
- Mastering the Java CLASSPATH
- softirq
- 线程工厂 ThreadFactory源码解读
- Struts2中的链接标签 <s:url>和<s:a>
- 终助词「さ」的用法
- 黑马程序员(C#)--C#泛型
- 基于WizFi220的Cosmo WiFi扩展板
- Dinic算法的原理与构造