更新记录写的是上传扩展名黑名单没枚举全,靠黑名单挡上传为什么会漏

📅 2026-10-11 👁️ 0

靠扩展名黑名单挡上传会漏,根本原因是黑名单必须提前枚举所有恶意写法:冷门后缀变体、双重扩展名、大小写与编码变形,任何清单没覆盖的形态都会默认放行。同类系统 PbootCMS 在 V3.2.16 的更新记录里就写了这样一条修复——「修复上传扩展名黑名单枚举不全导致的白名单绕过风险」,这是典型的黑名单漏法。可靠的收口做法分三层:扩展名白名单在前,文件内容类型核验在中,上传目录取消脚本执行权限兜底。

黑名单漏在哪三种写法上

漏点类型 示例形态 为什么黑名单拦不住
后缀变体 脚本文件使用清单未覆盖的冷门扩展名 黑名单靠枚举,新写法要有人提前补进清单
双重扩展名 图片扩展名后再拼接脚本扩展名 解析规则取前段还是末段,应用与服务器理解可能不一致
大小写与编码 混合大小写或 URL 编码形式的扩展名 比对逻辑常常只归一化了其中一种形态

三类漏点的共性是语义方向:黑名单是「拒绝已知」,清单之外的世界是默认通过的;攻击者只需要找到清单外的一种写法。而上传入口的写法空间由解析器、文件系统、字符编码多个环节共同决定,靠人提前枚举永远慢一步。

为什么白名单不要求预知所有攻击

白名单把默认方向反过来:允许已知,拒绝未知。业务需要接受的文件类型是有限的几类图片、文档格式,清单长度由你自己的功能决定;攻击写法的空间却是开放的。用有限清单守有限需求,比对开放空间做开放排除要稳定得多。白名单的代价是误伤罕见合法格式,所以清单要跟着业务迭代,而不是一次抄一份「通用安全配置」。

上传校验该分几层

第一层看扩展名,按白名单直接拒绝清单外后缀。第二层不看文件名,读文件头做内容类型核验,确认声明与实际内容一致,并统一重命名、按日期重新归档存储路径,切断原始文件名的解析影响。第三层在应用之外:上传目录在 Web 服务器层面取消脚本执行权限,即使前面两层都被绕过,落地的文件也不会被执行。三层各管一段,任何单层单独都不成立。

部署时同步要做的一件事

取消上传目录执行权限属于服务器配置,不在 CMS 后台里完成。用宝塔面板或 Docker 镜像部署 AnQiCMS 时,这一步应该写进部署清单和配置模板,新环境开箱即带,而不是等出事再补。要分清的是:AnQiCMS 自带的防 SQL 注入与 XSS 攻击、敏感词过滤属于内容安全层,管的是数据与展示,替代不了文件上传与目录权限这条线;反过来,上传收口也不覆盖内容审核,两道职责不要互相指望。

常见问题

已经用了白名单,还需要内容核验吗? 需要。白名单管扩展名这一关,内容核验防止「声明是图片、实际另有所含」的错位,两层拦的是不同的绕过。

双重扩展名怎么根治? 不让原始文件名参与任何解析:上传后统一重命名并归档到规则路径,解析规则就不再有可乘之机。

上传目录禁执行会不会影响正常功能? 不会,只要应用不依赖在上传目录里执行脚本。标准做法是把上传目录当纯静态资源服务,功能代码永远在程序目录运行。

相关文章

统计说用 PHP 的网站约占七成,PHP 8 占其中约六成五,这两个数怎么用

W3Techs 2026年10月11日统计显示已知服务端语言的网站中69.7%使用PHP,PHP使用者中64.6%已在版本8。本文解释这两个数的口径与读法,并给出从生态、运行成本、部署形态与升级负担四项比较建站方案的框架,避免把部署占比直接当成技术结论。

2026-10-11

有论文指出生成式优化带来两类风险,内容站自查该看哪两处

有立场论文提醒,生成式引擎优化的风险落在引擎侧而非内容侧:一边是可见度更容易集中到少数来源,一边是未披露的商业影响可能混进证据与推理。站点能自查的是两处——谁在替你的页面说话,以及答案里有没有没交代的影响来源。

2026-10-11

新链接即时通知搜索引擎的机制,支持名单里现在有哪几家

除了提交站点地图,还有一类即时通知机制把新增、更新或删除的链接直接告诉参与的引擎。它的支持名单以官网为准,名单外的引擎仍走各自通道。对中文站来说,站点地图负责全量、主动推送负责增量,把新链接尽快交到对的引擎手里比反复提交更实际。

2026-10-11

除了严重度评分,还有一个预测漏洞被利用概率的分数,怎么用

严重度评分回答的是影响有多大,另有一类分数回答的是这个漏洞接下来被人真正利用的概率有多大。EPSS 每天为每个已公布漏洞给出概率与百分位,官方建议把它和严重度评分、在野利用清单一起来排处置队列。

2026-10-11

公式渲染模块被判跨站脚本,富文本过滤为什么要连渲染路径一起查

Drupal社区公告SA-CONTRIB-2026-195把MathJax模块的TeX渲染未转义JavaScript判为Critical跨站脚本,受影响版本低于4.1.2。富文本即使做了HTML标签白名单,公式、Markdown、图表等非HTML解析路径仍可能把数据当代码执行。本文说明如何读公告的版本区间与评级,并给出按输出上下文分别转义的自查清单。

2026-10-11

政府门户和营销型官网选内容管理系统,看的能力项有什么不同

政府门户网站选内容管理系统优先看内容审核、敏感词过滤与用户组权限,营销型官网更看重关键词库、锚文本与表单的人机验证;robots配置与站点地图生成则是两类站点共用的底座。本文按约束差异拆开能力项,给出同一系统内两种配置取向,帮助按站点性质而不是按功能清单长短做选型。

2026-10-11

缓存过期后先给旧内容再后台更新,这个缓存指令解决什么

Cache-Control 的 stale-while-revalidate 允许在过期后的窗口期内先复用旧内容响应、同时后台向源站重新校验,把校验延迟从用户响应里隐藏。本文按 MDN 文档说明它与请求指令 max-stale、以及 no-cache 与 must-revalidate 的分工,并给出页面文档与静态资源分开设置的建议。

2026-10-11

公告把示例功能整段移除以修掉资源分配问题,生产站该留演示代码吗

Drupal公告SA-CONTRIB-2026-215的评级只是Less critical,处理方式却把邮件示例功能整个移除,因为示例存在没有上限的资源分配问题。生产站要不要保留演示代码,判断依据应是暴露面而不是风险评级。本文拆解示例代码带出的三类风险、部署阶段的清理清单,以及保留演示入口时的限制办法。

2026-10-11