首页/新闻资讯/正文详情

文件上传的三种白名单,和3种黑名单,以及3种针对文件内容的修改,特性、get,post传参方式区别,正则匹配,以及高亮函数作用

发布时间:2026/11/4 11:32:24 来源:云帆数科 栏目:资讯中心
文件上传的三种白名单,和3种黑名单,以及3种针对文件内容的修改,特性、get,post传参方式区别,正则匹配,以及高亮函数作用
一、黑白名单一3 种白名单校验方式白名单核心只放行符合规则的文件其余全部拒绝。后缀名白名单逻辑预定义允许上传的文件后缀如.jpg/.png/.pdf仅校验文件名后缀匹配时放行。示例PHPphp运行$allowedExts [jpg, png, gif]; $ext pathinfo($_FILES[file][name], PATHINFO_EXTENSION); if (!in_array(strtolower($ext), $allowedExts)) { die(仅允许上传图片文件); }特点最常用但需注意大小写如.JPG转小写、多后缀绕过如test.jpg.php。MIME 类型白名单逻辑校验 HTTP 请求头中Content-Type仅允许指定类型如image/jpeg、image/png。示例PHPphp运行$allowedMime [image/jpeg, image/png, image/gif]; $mime $_FILES[file][type]; if (!in_array($mime, $allowedMime)) { die(MIME类型非法); }特点易被抓包篡改如把application/x-php改为image/jpeg需配合其他校验。文件头魔数白名单逻辑校验文件二进制开头的固定标识魔数如 JPG 以FF D8 FF开头、PNG 以89 50 4E 47开头仅匹配放行。示例PHPphp运行$file fopen($_FILES[file][tmp_name], rb); $header fread($file, 4); // 读取前4字节 fclose($file); $allowedHeader [ffd8ff, 89504e47, 47494638]; // JPG/PNG/GIF if (!in_array(bin2hex($header), $allowedHeader)) { die(文件内容非法); }特点最可靠的白名单方式直接校验文件实际内容不易被绕过。二3 种黑名单校验方式禁止特定内容黑名单核心拒绝指定的危险内容其余放行风险高易被绕过。后缀名黑名单逻辑禁止危险后缀如.php/.php5/.jsp仅拒绝匹配的后缀。示例PHPphp运行$forbidExts [php, php5, php7, jsp]; $ext pathinfo($_FILES[file][name], PATHINFO_EXTENSION); if (in_array(strtolower($ext), $forbidExts)) { die(禁止上传脚本文件); }绕过方式使用黑名单外的后缀如.php4/.phtml、空格 / 点绕过test.php.、大小写Test.PHP。关键词黑名单逻辑扫描文件名 / 文件内容中是否包含危险关键词如?php、eval(、system(包含则拒绝。示例PHPphp运行$content file_get_contents($_FILES[file][tmp_name]); $forbidKeywords [?php, eval(, system(]; foreach ($forbidKeywords as $kw) { if (strpos($content, $kw) ! false) { die(文件包含危险代码); } }绕过方式编码如base64_decode、变形?替代?php、注释截断。文件大小黑名单反向限制逻辑禁止超大文件如超过 10MB本质是 “拒绝不符合大小的文件”属于黑名单逻辑。示例PHPphp运行if ($_FILES[file][size] 10 * 1024 * 1024) { die(文件超过10MB禁止上传); }绕过方式分片上传、压缩后上传再解压。三3 种针对文件内容的修改绕过 / 加固文件内容修改是上传漏洞的核心利用 / 防御手段常见方式图片马文件内容拼接逻辑将 PHP 代码嵌入图片文件尾部 / 头部保留图片魔数绕过文件头校验上传后通过解析漏洞执行。示例bash运行# 命令行拼接将shell.php内容写入test.jpg尾部 copy /b test.jpg shell.php webshell.jpg防御上传后重新编码图片如imagecreatefromjpeg重新生成清除嵌入的代码。代码编码 / 混淆绕过关键词检测逻辑对危险代码进行 base64、十六进制编码上传后通过解码函数执行。示例PHPphp运行# 混淆后的代码绕过关键词检测 ?php eval(base64_decode(ZXZhbCgkX1BPU1RbJ2MnXSk7)); ?防御解码后再检测关键词、限制eval/assert等危险函数。文件内容截断绕过后缀校验逻辑利用 0x00 截断PHP 5.3.4或换行符修改文件名 / 内容中的后缀标识。示例抓包修改文件名test.php%00.jpg0x00 截断服务器解析为test.php内容在代码后加\0截断绕过关键词扫描。防御升级 PHP 版本、过滤文件名中的特殊字符%00、\0、换行符。二、PHP 特性 GET/POST 传参区别抓包视角一核心 PHP 特性与文件上传相关文件上传相关超全局变量$_FILES存储上传文件信息name/type/tmp_name/size/error解析特性.php后缀的文件会被 PHP 解析器执行.phtml/.php5等后缀若配置了AddType application/x-httpd-php .phtml也会解析短标签? ?等价于?php echo ?可绕过?php关键词检测路径处理pathinfo()取后缀时若文件名含多个点如test.php.jpg仅取最后一个后缀临时文件上传的文件先存到php.ini中upload_tmp_dir目录脚本结束后自动删除需手动移动move_uploaded_file。二GET/POST 传参区别抓包对比维度GET 传参POST 传参抓包位置请求行URL 后如GET /test.php?name123 HTTP/1.1请求体Header 后空行如name123age20数据类型仅 ASCII 字符无法传二进制支持任意类型二进制 / 文件如multipart/form-data长度限制受浏览器 / 服务器限制如 URL 长度≤2KB无默认限制可通过php.ini的post_max_size配置抓包示例文件上传无法传文件仅 URL 参数Content-Type: multipart/form-data; boundary----WebKitFormBoundaryxxx包含文件二进制内容参数可见性暴露在 URL 中日志 / 历史记录隐藏在请求体中相对安全PHP 接收方式$_GET[name]或$_REQUEST$_POST[name]或$_FILES文件三、正则匹配 高亮函数作用一正则匹配文件上传中常用正则是校验文件名 / 内容的核心手段PHP 中常用函数preg_match()、preg_replace()。常见正则示例校验图片后缀/^\.(jpg|png|gif)$/ii 表示忽略大小写检测 PHP 标签/\?php/i匹配?php忽略大小写过滤特殊字符preg_replace(/[^\w\.]/, , $filename)仅保留字母 / 数字 / 下划线 / 点。注意事项正则边界必须加^开头和$结尾否则会匹配部分内容如/jpg/会匹配testjpg.txt贪婪匹配默认贪婪需用?非贪婪如/\.(php).*$/会匹配test.php.jpg的.php.jpg。二高亮函数作用PHP 高亮函数用于代码语法高亮核心是highlight_file()/highlight_string()在文件上传漏洞中需重点关注功能highlight_file($filename)输出指定文件的内容并按 PHP 语法高亮添加 HTML 标签highlight_string($str)高亮字符串中的 PHP 代码。安全风险若未校验权限攻击者可通过highlight_file($_GET[file])读取服务器任意文件如highlight_file(/etc/passwd)若上传的图片马被高亮函数输出会暴露嵌入的 PHP 代码但不会执行仅泄露。防御限制高亮的文件路径如仅允许./upload/目录过滤../等路径遍历字符。总结文件上传安全白名单优先魔数 后缀 MIME黑名单易被绕过文件内容修改核心是 “保留合法标识 嵌入危险代码”GET/POST 核心区别GET 传参在 URL短 / ASCIIPOST 在请求体支持大文件 / 二进制正则匹配需注意边界和贪婪模式高亮函数需限制路径避免文件读取漏洞。

相关推荐

构建企业级AI代理日志监控系统:分布式架构与智能分析完整方案
构建企业级AI代理日志监控系统:分布式架构与智能分析完整方案

构建企业级AI代理日志监控系统:分布式架构与智能分析完整方案 在现代企业AI部署中,Hermes Agent作为一款可扩展的AI代理框架,面临着复杂的日志监控挑战。本文将深入解析如何通过ELK Stack与机器学习技术,构建一个完整的分布式日志… · 2026/11/4 11:32:24

Hermes Agent与边缘AI安全协议:TLS与DTLS配置指南
Hermes Agent与边缘AI安全协议:TLS与DTLS配置指南

Hermes Agent与边缘AI安全协议:TLS与DTLS配置指南 在边缘计算与AI融合的时代,安全通信成为保障数据传输的核心环节。Hermes Agent作为一款强大的开源AI代理框架,提供了全面的TLS(传输层安全协议)支持,确保… · 2026/11/4 11:31:23

优化Hermes Agent的API文档自动化:Swagger与OpenAPI完整指南
优化Hermes Agent的API文档自动化:Swagger与OpenAPI完整指南

优化Hermes Agent的API文档自动化:Swagger与OpenAPI完整指南 在现代软件开发中,API文档的质量直接影响开发效率和协作体验。Hermes Agent作为一款强大的AI代理框架,其API接口的清晰性和可访问性至关重要。本文将详细介绍如何利用Swagger与Op… · 2026/11/4 11:31:23

有什么智能体能用的企业数据接口
有什么智能体能用的企业数据接口

智能体办公普及下,专业场景的数据能力短板近几年,大模型应用从通用对话快速向企业级场景渗透,智能体(Agent)、AI 办公助手逐渐成为采购、风控、法务、内审等岗位的常用效率工具。从腾讯云 WorkBuddy 发布十大 “王炸组… · 2026/11/4 12:12:02

签证办理 AI 化:材料清单、进度追踪与风险提示的工程实践
签证办理 AI 化:材料清单、进度追踪与风险提示的工程实践

签证这件事,用户痛点非常集中:材料清单不透明、进度全靠猜、被拒签了不知道为什么。市面上绝大多数"签证助手"还停留在 FAQ 机器人阶段,用户问一句答一句,真正要办的时候还是得翻使馆官网 PDF。把签证办理做成一个真正能… · 2026/11/4 12:12:02

数据库口令从代码搬进凭据托管,轮换从半天变成两分钟
数据库口令从代码搬进凭据托管,轮换从半天变成两分钟

数据库口令从代码搬进凭据托管,轮换从半天变成两分钟 上周给一个测试库换口令。改完发现要发版——那串字符在代码里写死了三处:配置类一份、启动脚本一份、连接池初始化一份。逐处改完,还得挨个重启。 漏的地方第二天早上才暴露:… · 2026/11/4 12:12:02

从顶流到“失宠”!当年撑起半个互联网的MySQL,如今还有多少企业还在用?
从顶流到“失宠”!当年撑起半个互联网的MySQL,如今还有多少企业还在用?

说起MySQL,搞IT的朋友肯定不陌生,这简直就是互联网世界的“老伙计”。想当年,它可是撑起了大半个互联网江山,现在不少企业的系统里还能看到它的身影。曾经的互联网基础设施担当大概十多年前,互联网刚开始爆发式增长的时… · 2026/11/4 12:12:02

质性资料编码用软件还是手工:什么时候该上软件、什么时候表格就够
质性资料编码用软件还是手工:什么时候该上软件、什么时候表格就够

访谈做完,三十多份转写稿静静躺在硬盘里,每份两万字上下。编到第五份时,多数人会卡在同一个念头:手上这张表格真撑得住后面的分析吗,还是得先花两周把某款质性分析软件啃熟。这个纠结很少靠「哪款软件更专业」解决&… · 2026/11/4 12:12:01

CS336 Learning(一) —— 分词器
CS336 Learning(一) —— 分词器

TL;DR BPE:自底向上合并,每一步只看相邻 token 对的频率,谁出现得多就合并谁,简单高效,GPT 系常用。WordPiece:同样自底向上合并,但决策依据换成似然增益(P(A,B) / (P(A)P(B))&… · 2026/11/4 12:11:01

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码