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

news/2024/7/2 2:14:01

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这种文件,都因为文件名被改写而无法成功实施攻击

转载于:https://www.cnblogs.com/feizianquan/p/10632959.html


http://www.niftyadmin.cn/n/2043176.html

相关文章

linux查看CPU性能及工作状态的指令mpstat,vmstat,iostat,sar,top

衡量CPU性能的指标:1,用户使用CPU的情况;CPU运行常规用户进程CPU运行niced processCPU运行实时进程2,系统使用CPU情况;用于I/O管理:中断和驱动用于内存管理:页面交换用户进程管理:进…

Codeforces Round #549 (Div. 2) Solution

传送门 A.The Doors 看懂题目就会写的题 给一个 $01$ 序列&#xff0c;找到最早的位置使得 $0$ 或 $1$ 已经全部出现 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; typede…

基于jsp+ssm的火车飞机订票系统

随着旅游业的逐渐的成熟发达&#xff0c;火车客运量大幅度的提高&#xff0c;国内国际的旅游车次的增加&#xff0c;这些都对火车站的信息管理系统提出了更高的要求&#xff0c;所以要不断的完善更新火车票订票系统&#xff0c;提高火车票订票系统的工作效率。 火车票订票系统…

《程序设计入门——C语言》翁恺老师 第四周编程练习记录

1奇偶个数&#xff08;5分&#xff09;题目内容&#xff1a; 你的程序要读入一系列正整数数据&#xff0c;输入-1表示输入结束&#xff0c;-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。 输入格式: 一系列正整数&#xff0c;整数的范围是&#xff08;0,1000…

javaWeb项目中如何实现在线查看pdf文件

最近有需求要实现在网页直接查看pdf&#xff0c;word&#xff0c;excel文件。但是实际当中并没有很好的开源插件供我们使用&#xff0c;确实有一些付费的插件不错&#xff0c;也很好用&#xff0c;但是对于我来说都不适合。 现在只是单纯的找到了围魏救赵的方法。 就是先实现显…

Java+MySQL 基于Springboot的垃圾分类网站

当前全球都在提倡环境保护&#xff0c;现在社会高速发展&#xff0c;我们每个人每天都会产生很多的垃圾&#xff0c;尤其是工业发展到一定阶段之后这些垃圾的种类也越来越多&#xff0c;如果随意丢弃很可能会造成环境污染&#xff0c;尤其是一些电池等重污染垃圾&#xff0c;所…

byte转bit

由于项目需要&#xff0c;传过来的数据是高位到低位的Byte&#xff0c;需要输出低位到高位的bool数组。 public static bool[] getBits(byte[] byt){bool[] ret new bool[byt.Length * 8];for (int j byt.Length - 1; j > 0; j--){for (int i 0; i < 8; i){ret[(byt.L…

linux下同步时钟、时区

参考文章 Centos 7.Xtimedatectl set-timezone Asia/Shanghai* * * * * ntpdate -u cn.pool.ntp.org 转载于:https://www.cnblogs.com/arcer/p/10640929.html