MIME检测原理

服务端MIME类型检测是通过检查http包的Content-Type字段中的值来判断上传文件是否合法的。

php示例代码:

if($_FILES['userfile']['type'] != "image/gif") {
//检测Content-type
//当上传文件的type不为`image/gif`时,程序不执行文件保存操作,直接退出。
//当上传文件的type是`image/gif`时,程序跳出if语句,执行文件保存操作。
echo "Sorry, we only allow uploading GIF images";
exit;
}
$uploaddir = 'uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
{
echo "File is valid, and was successfully uploaded.\n";
echo "File path is ".$uploadfile;
} 

else
{
echo "File uploading failed.\n";
}

示例代码的功能是服务端用来处理文件上传的,在第二行中if语句对上传文件的type判断是否为image/gif

在代码中检测的type值,对应http包中的字段Content-Type的值,也就是所我们可以伪装上传文件的type值,来绕过服务端的MIME检测

  • 根据攻击原理,有以下几点应该注意:

  • 1:文件上传的目录设置为不可执行 只要web容器无法解析该目录下的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此此点至关重要。实际中,很多大型网站的上传应用,文件上传后会放到独立的储存上,做静态处理。但对一些小应用,如果存在上传功能,则仍需要多加关注

  • 2:判断文件类型: 判断文件类型时,应结合MIME Type、后缀检查等方式。推荐使用白名单,黑名单的方式已经无数次被证明不可靠。此外,针对图片处理,可以使用亚索函数或者resize函数,在处理图片的同事破坏掉图片中可能包含的HTML代码

  • 3:使用随机数改写文件名和文件路径 文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用使用随机函数改写了文件名和路径,将极大增加攻击成本。与此同时,像1.php.rar.rar、或者1.xml这种文件,都因为文件名被改写而无法成功实施攻击

从零开始学安全(四十)●上传文件MIME类型绕过漏洞防御的更多相关文章

  1. js判断上传文件的类型和大小

    //检测文件大小和类型 function fileChange(target){ //检测上传文件的类型 if(!(/(?:jpg|gif|png|jpeg)$/i.test(target.value ...

  2. MIME类型-服务端验证上传文件的类型

    MIME的作用 : 使客户端软件,区分不同种类的数据,例如web浏览器就是通过MIME类型来判断文件是GIF图片,还是可打印的PostScript文件. web服务器使用MIME来说明发送数据的种类, ...

  3. Abp中SwaggerUI的接口文档添加上传文件参数类型

    在使用Swashbuckle上传文件的时候,在接口文档中希望看到上传控件,但是C#中,没有FromBodyAttribute这个特性,所以需要在运行时,修改参数的swagger属性.   首先看下,最 ...

  4. js限制上传文件的类型和大小

    var maxsize = 6*1024*1024;//6M var errMsg = "上传的附件文件不能超过6M!!!"; var tipMsg = "您的浏览器暂不 ...

  5. selenium python (十四)上传文件的处理

    #!/usr/bin/python# -*- coding: utf-8 -*-__author__ = 'zuoanvip' #上传过程一般要打开一个系统的windows窗口,从窗口选择本地文件添加 ...

  6. [JS] 限制上传文件的类型和大小

    <!DOCTYPE html> <!-- saved from url=(0035)http://localhost:9090/qraved/update --> <ht ...

  7. 从零开始学安全(四十四)●TCP三次握手四次挥手

    wireshark:Beyond Compare是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直接与 ...

  8. 从零开始学安全(四十五)●browser_autopwn2漏洞利用配合Ettercap工具实施DNS欺骗攻击

    系统:kali 2019  工具Ettercap,Metasploit 环境内网地址 首先 cd /etc/ettercap/ 移动在ettercap 文件下 在用vim 打开编辑 etter.dns ...

  9. 从零开始学安全(四十二)●利用Wireshark分析ARP协议数据包

    wireshark:是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换,是目前 ...

随机推荐

  1. javascript && php &&java

    java && javascript && php 轰炸!!!恢复 1.javascript简介 *是基于对象和时间的驱动语言,应用于客户端. -----基于对象: * ...

  2. SprintBoot的@ComponentScan“踩坑”

    主要的话说在前面:在启动日志中没有看到Controller对应的URL被映射,那么请检查你的Controller是否被Spring管理了.此次踩坑就是忘了SpringBoot在没配置@Componen ...

  3. 改造MIP获得搜索青睐,轻松完成SEO

    搜索引擎目标及页面排序方法 搜索引擎作为互联网流量的入口,承担着流量分发的职责.但排序成千上万的网页,决定哪些网页在第一页,是由网页本身的用户体验决定的.权重算法会从内容优质性,广告多少,加载速度等多 ...

  4. Docker最全教程之使用 Visual Studio Code玩转Docker(二十)

    前言 VS Code是一个年轻的编辑器,但是确实是非常犀利.通过本篇,老司机带你使用VS Code玩转Docker——相信阅读本篇之后,无论是初学者还是老手,都可以非常方便的玩转Docker了!所谓是 ...

  5. SharePoint布局页创建(实战)

    分享人:广州华软 极简 一. 前言 SharePoint有母版页及布局页,母版页控制页面头部.底部,而布局页则控制页面中间内容区域.通过布局页,可以快速修改页面内容区域. SharePoint的页面布 ...

  6. RationalRose 安装过程中无法加载镜像的问题

    前情提要:本文主要以提供关键问题的解决思路为目的,境况紧急的,在核对好所遇问题与博主是否一致后,可以直接跳到最后看解决办法即可. 另外,本文重要部分采用不同色文字,加以强调. 任务:安装Rationa ...

  7. pytest框架之命令行参数1

    前言 pytest是一款强大的python自动化测试工具,可以胜任各种类型或者级别的软件测试工作.pytest提供了丰富的功能,包括assert重写,第三方插件,以及其他测试工具无法比拟的fixtur ...

  8. spring framework体系结构及内部各模块jar之间的maven依赖关系

    很多人都在用spring开发java项目,但是配置maven依赖的时候并不能明确要配置哪些spring的jar,经常是胡乱添加一堆,编译或运行报错就继续配置jar依赖,导致spring依赖混乱,甚至下 ...

  9. 【工具篇】抓包中的王牌工具—Fiddler (2-工具介绍)

    Fiddler 抓包工具界面简介 1) 字段说明 Fiddler想要抓到数据包,要确保Capture Traffic是开启,在File –> Capture Traffic. 开启后再左下角会有 ...

  10. 吴恩达机器学习笔记58-协同过滤算法(Collaborative Filtering Algorithm)

    在之前的基于内容的推荐系统中,对于每一部电影,我们都掌握了可用的特征,使用这些特征训练出了每一个用户的参数.相反地,如果我们拥有用户的参数,我们可以学习得出电影的特征. 但是如果我们既没有用户的参数, ...