No.23 笔记 | WEB安全 - 任意文件漏洞 part 5
本文全面且深入地探讨了文件上传漏洞相关知识。从基础概念出发,清晰地阐述了文件上传漏洞的定义及其产生的本质原因,同时列出了该漏洞成立的必要条件。详细说明了文件上传漏洞可能对服务器控制权、网站安全以及业务运营带来的严重危害。
文中还深入解析了前端验证与服务器端验证机制,包括具体的验证方法与代码示例。进一步介绍了常见的绕过技术和高级攻击手段,如条件竞争、二次渲染绕过等,并针对这些攻击给出了切实可行的防护建议。
最后,通过将文件上传过程类比为快递公司处理包裹,以形象生动的方式解释了防护措施的重要性,包括多重检查、隔离存储等,是网络安全从业者和相关技术人员防范文件上传漏洞的重要参考资料。

1. 基础概念
1.1 什么是文件上传漏洞?
- 定义:由于服务器端对上传文件的验证不严格,导致攻击者可以上传恶意文件并执行
- 本质:服务器端安全控制不足的问题
1.2 漏洞成立的必要条件
- 服务器存在文件上传功能
- 验证机制存在缺陷
- 上传的文件能被解析执行
- 攻击者可以访问上传的文件
2. 漏洞危害
2.1 服务器控制权沦陷
- 执行任意命令
- 获取系统权限
- 访问敏感信息
- 控制数据库
2.2 网站安全威胁
- 篡改网站内容
- 植入恶意代码
- 传播木马病毒
- 构建后门程序
2.3 业务影响
- 服务中断
- 数据泄露
- 财务损失
- 声誉受损
3. 验证机制详解
3.1 前端验证
JavaScript验证
// 常见的前端验证代码示例
function checkFile(file) { // 检查文件类型 if (!file.type.match('image.*')) { alert('只能上传图片文件!'); return false; } // 检查文件大小 if (file.size > 5242880) { alert('文件不能大于5MB!'); return false; } return true;
}
3.2 服务器端验证
1. 文件扩展名验证
- 黑名单方式:
$blacklist = array('php', 'php3', 'php4', 'php5', 'phtml',
'pht', 'jsp', 'jspa', 'jspx', 'asp', 'aspx', 'asa', 'cer',
'cdx');
- 白名单方式:
$whitelist = array('jpg', 'jpeg', 'png', 'gif');
2. MIME类型验证
// MIME类型检查示例
$allowed_types = array('image/jpeg', 'image/png', 'image/gif');
if (!in_array($_FILES['upload']['type'], $allowed_types)) { die('不允许的文件类型');
}
3. 文件内容验证
// 检查文件头部特征
$image_info = getimagesize($_FILES['upload']['tmp_name']);
if ($image_info === false) { die('非法的图片文件');
}
4. 常见绕过技术
4.1 前端绕过
- 禁用 JavaScript。
- 使用抓包工具(如 Burp Suite)。
- 直接构造 POST 请求。
4.2 扩展名绕过
- 大小写变换:.pHp,.PhP,.PHP。
- 特殊扩展名:.php3,.php4,.php5,.phtml。
- 双扩展名:test.jpg.php,test.php.jpg。
4.3 MIME 类型绕过
- 修改 Content - Type 头。
- 常见图片 MIME 类型:image/jpeg,image/png,image/gif。
5. 高级攻击技术
5.1 条件竞争
攻击原理:
- 上传合法文件
- 在验证过程中快速替换为恶意文件
- 利用时间差完成攻击
防护建议:
- 使用原子操作
- 加锁机制
- 临时文件处理
5.2 二次渲染绕过
常见技术:
- 图片马制作
- 绕过二次渲染
- 保持payload完整性
6. 防护措施
6.1 基本防护
- 完善的文件验证
- 文件重命名
- 限制文件大小
- 设置上传目录权限
6.2 进阶防护
- 使用Web应用防火墙(WAF)
- 实施文件隔离
- 采用CDN存储
- 定期安全扫描
6.3 最佳实践
- 采用白名单验证
- 多重验证机制
- 文件存储分离
- 权限最小化原则
文件上传漏洞:一个快递包裹的故事 📦

想象你正在经营一家快递公司。你的工作就是接收包裹并送到目的地。这就像网站接收用户上传的文件一样。
1. 为什么会有危险?🤔
想象一下:
- 如果有人寄了一个装有炸弹的包裹,但外表看起来很普通
- 快递员没仔细检查就收下了
- 结果包裹送到目的地后造成了破坏
这就是文件上传漏洞的本质:
- 攻击者上传看似普通但实际包含恶意代码的文件
- 服务器没有严格检查就接收并执行了这些文件
- 结果服务器被攻击者控制了
2. 现实生活中的例子 🌟
场景一:照片上传
假设你在社交网站上传头像:
实际操作:
1. 选择一张可爱猫咪照片
2. 点击上传按钮
3. 网站显示你的新头像
但黑客可能会:
黑客操作:
1. 准备一个"照片.php"文件
2. 文件看起来是张照片
3. 实际内容是能控制服务器的代码
3. 防护措施:安检系统 🔍
就像机场安检一样,文件上传也需要多重检查:
第一道防线:前台检查
// 就像安检员问你:"你的包裹里是什么?"
if (文件类型 != 图片) { 拒绝接收(); }
第二道防线:后台深度检查
// 像X光机扫描包裹
检查文件实际内容(); 检查文件类型(); 检查文件大小();
4. 实际攻击案例解析 🎯
案例:图片马

想象你收到一个"特殊"的明信片:
- 表面看:是张普通的风景照
- 实际上:照片里藏着一串密码
5. 防护建议:像安保系统一样 🛡️
- 多重检查
- 门卫检查(前端)
- 安检仪(MIME类型)
- 开箱检查(内容分析)
- 隔离存储
- 就像危险品要单独存放
- 上传文件放在特殊目录
- 限制文件执行权限
6. 实战演示:快递验收流程 📝
正常流程:
- 查看包裹外观(文件扩展名)
- 过X光机(文件内容检查)
- 确认收件人(权限验证)
- 放入对应仓库(存储隔离)
攻击者可能的绕过方式:
- 虚假标签(改扩展名)
- 夹带私货(隐藏代码)
- 趁人不备(条件竞争)
7. 关键防护点 🔐
想象你是一个严格的安检员:
- 白名单制度
- 只收特定类型的包裹
- 比如只允许jpg、png格式
- 深度检查
- 不光看外表
- 还要检查内部内容
- 隔离存储
- 危险品专门存放
- 普通物品单独存放
8. 实用小贴士 💡
永远不信任用户输入
就像不轻易相信陌生人的包裹
使用多重验证
就像重要物品需要多重确认
定期检查系统
就像定期安全演习
相关文章:
No.23 笔记 | WEB安全 - 任意文件漏洞 part 5
本文全面且深入地探讨了文件上传漏洞相关知识。从基础概念出发,清晰地阐述了文件上传漏洞的定义及其产生的本质原因,同时列出了该漏洞成立的必要条件。详细说明了文件上传漏洞可能对服务器控制权、网站安全以及业务运营带来的严重危害。 文中还深入解析了…...
EasyPlayer.js网页播放器,支持FLV、HLS、WebSocket、WebRTC、H.264/H.265、MP4、ts各种音视频流播放
EasyPlayer.js功能: 1、支持解码H.264视频(Baseline, Main, High Profile全支持,支持解码B帧视频) 2、支持解码H.265视频(flv id 12) 3、支持解码AAC音频(LC,HE,HEv2 Profile全支持) 4、支持解码MP3音频以及Speex音频格式 5、可…...
WPF数据绑定的五大模式
WPF(Windows Presentation Foundation)是微软推出的一种用于构建Windows用户界面的UI框架。它支持数据绑定,允许开发者将UI元素与数据源绑定,从而实现数据和界面的自动同步。WPF数据绑定有几种不同的模式, 以下是五种…...
从零到一:大学新生编程入门攻略与成长指南
文章目录 每日一句正能量前言编程语言选择:为大学新生量身定制Python:简单而强大的选择JavaScript:Web开发的基石Java:面向对象的经典C#:微软的全能选手 学习资源推荐:编程学习的宝藏在线课程教程和文档书籍…...
详细分析Pytorch中的transpose基本知识(附Demo)| 对比 permute
目录 前言1. 基本知识2. Demo 前言 原先的permute推荐阅读:详细分析Pytorch中的permute基本知识(附Demo) 1. 基本知识 transpose 是 PyTorch 中用于交换张量维度的函数,特别是用于二维张量(矩阵)的转置操…...
初识WebGL
思路: 构建<canvas>画布节点,获取其的实例。使用getWebGLContext() 拿到画布上下文。拿到上下文用clearColor() 设置背景颜色。最后清空canvas画布,是为了清除颜色缓冲区。 html结构: <!DOCTYPE html> <html lang"en&…...
【力扣】Go语言回溯算法详细实现与方法论提炼
文章目录 一、引言二、回溯算法的核心概念三、组合问题1. LeetCode 77. 组合2. LeetCode 216. 组合总和III3. LeetCode 17. 电话号码的字母组合4. LeetCode 39. 组合总和5. LeetCode 40. 组合总和 II小结 四、分割问题6. LeetCode 131. 分割回文串7. LeetCode 93. 复原IP地址小…...
「C/C++」C/C++ 之 第三方库使用规范
✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…...
六、元素应用CSS的习题
题目一: 使用CSS样式对页面元素加以修饰,制作“ 旅游攻略 ”网站。如下图所示 运行效果: 代码: <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>旅游攻略</title><…...
正式入驻!上海斯歌BPM PaaS管理软件等产品入选华为云联营商品
近日,上海斯歌旗下BPM PaaS管理软件(NBS)等多款产品入选华为云云商店联营商品,上海斯歌正式成为华为云联营商品合作伙伴。用户登录华为云云商店即可采购上海斯歌的BPM PaaS产品及配套服务。通过联营模式,双方合作能够深…...
使用 Axios 上传大文件分片上传
背景 在上传大文件时,分片上传是一种常见且有效的策略。由于大文件在上传过程中可能会遇到内存溢出、网络不稳定等问题,分片上传可以显著提高上传的可靠性和效率。通过将大文件分割成多个小分片,不仅可以减少单次上传的数据量,降…...
Nginx+Lua脚本+Redis 实现自动封禁访问频率过高IP
1 、安装OpenResty 安装使用 OpenResty,这是一个集成了各种 Lua 模块的 Nginx 服务器,是一个以Nginx为核心同时包含很多第三方模块的Web应用服务器,使用Nginx的同时又能使用lua等模块实现复杂的控制。 (1)安装编译工具…...
PART 1 数据挖掘概论 — 数据挖掘方法论
目录 数据库知识发掘步骤 数据挖掘技术的产业标准 CRISP-DM SEMMA 数据库知识发掘步骤 数据库知识发掘(Knowledge Discovery in Database,KDD)是从数据库中的大量数据中发现不明显、之前未知、可能有用的知识。 知识发掘流程(Knowledge Discovery Process)包括属性选择…...
Centos安装ffmpeg的方法
推荐第一个,不要自己编译安装,太难了,坑多。 在 CentOS 上安装 FFmpeg 有几种方法,以下是两种常见的方法: ### 方法一:使用 RPM Fusion 仓库安装 1. **启用 RPM Fusion 仓库**: RPM Fusion 是一个第三方仓库,提供了许多 CentOS 官方仓库中没有的软件包。 ```bash…...
理解SQL中通配符的使用
前言 SQL 是一种标准化的结构化查询语言,涉及结构化查询时,高效地检索数据至关重要。而通配符是SQL中模式匹配的有效的方法。使用通配符可以更轻松地检索到所需的确切数据。通配符允许我们定义多功能查询条件。本文将 介绍SQL通配符的基础知识及用法。 …...
SpringBoot篇(简化操作的原理)
目录 一、代码位置 二、统一版本管理(parent) 三、提供 starter简化 Maven 配置 四、自动配置 Spring(引导类) 五、嵌入式 servlet 容器 一、代码位置 二、统一版本管理(parent) SpringBoot项目都会继…...
Cesium的模型(ModelVS)顶点着色器浅析
来自glTF和3D Tiles的模型会走ModelVS.glsl。这个文件不单独是把模型顶点转换为屏幕坐标,还包含了丰富的处理过程。 Cesium是根据定义的Define判断某个行为是否需要被执行,比如#define HAS_SILHOUETTE,说明需要计算模型外轮廓线。 Cesium的…...
机器人领域中的scaling law:通过复现斯坦福机器人UMI——探讨数据规模化定律(含UMI的复现关键)
前言 在24年10.26/10.27两天,我司七月在线举办的七月大模型机器人线下营时,我们带着大家一步步复现UMI,比如把杯子摆到杯盘上(其中1-2位学员朋友还亲自自身成功做到该任务) 此外,我还特地邀请了针对UMI做了改进工作的fastumi作者…...
C++之多态的深度剖析
目录 前言 1.多态的概念 2.多态的定义及实现 2.1多态的构成条件 2.1.1重要条件 2.1.2 虚函数 2.1.3 虚函数的重写/覆盖 2.1.4 选择题 2.1.5 虚函数其他知识 协变(了解) 析构函数的重写 override 和 final关键字 3. 重载,重写&…...
Microsoft Office PowerPoint制作科研论文用图
Microsoft Office PowerPoint制作科研论文用图 1. 获取高清图片2. 导入PPT3. 另存为“增强型windows元文件”emf格式4. 画图剪裁 1. 获取高清图片 这里指通过绘图软件画分辨率高的图片,我一般使用python画dpi600的图片。 2. 导入PPT 新建一个PPT(注意&a…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
