矢量图标能带脚本,上传图片时净化该挡掉哪些内容

📅 2026-10-11 👁️ 0

矢量图标能带脚本,说的是文件类型本身的能力,不是某个漏洞。它扩展名为 .svg,常被当作图标随图片一起上传,但它是标记语言写成的文档:官方文档对脚本元素的描述直接写明「allows you to add scripts to an SVG document」,即脚本可以成为文档的一部分,外部脚本还能通过异步或延迟属性决定执行时机。所以「上传的是图片」这个前提,在这个格式上并不成立。

风险随打开方式变化

同一份文件,两种打开方式后果不同。作为 的引用来源加载时,脚本一般不被执行,风险较低;但用户或链接直接在浏览器标签里打开它,它就成了一份可执行文档,脚本在文件被加载的那个源下运行。如果它挂在站点自己的域与路径下,运行环境就是站点的上下文,Cookie 与登录态都在范围内。

因此不能只按扩展名与 MIME 判定安全。判定要看内容,处理要落在入库前。

净化要挡掉哪些内容

类别 具体对象 处理建议
脚本类 脚本元素、内联事件属性(如 onclick 一类) 直接移除
外部引用 嵌入外部文档的引用元素、指向远程的地址 移除或改写为站内资源
跳转包装 可点击的链接包装元素 视业务需要保留,保留时限定站内地址
变形写法 实体编码、注释拼接、大小写混排 先归一化再判断
体积类 压缩变体的解压体积、嵌套层级 限制解压后大小与层级
标识类 文档内重复的元素标识 重命名或去重,避免与页面自身冲突

压缩变体的问题常被忽略:体积看着很小的压缩包,解压后可能是数量级更大的内容,还会在解析阶段消耗远超预期的资源。PbootCMS 在 V3.2.22 记录上传类型扩充时,同时写明「SVG 强制净化并限制 SVGZ 解压」,两件事放在一起处理是常见的做法。

黑名单与白名单怎么选

黑名单是「列出要删的」,白名单是「列出能留的」。黑名单省力,能保住原有展示效果,但覆盖面取决于列表是否跟得上新写法;白名单安全边界清晰,代价是可能把不认识的合法元素一并删掉,导致图标显示不全。

实践上两者常合用:先按白名单保留绘图与结构所需的元素,再用黑名单显式清除脚本、事件属性与外部引用,并在净化后重新序列化输出,避免原样透传。

站内处理落在哪一段

上传净化处理的是文件内容层,与站内的内容审核不是一件事。AnQiCMS 的内容安全设置包含敏感词过滤、关键词替换与内容审核,这些针对正文文本;文件层要看的是上传校验、类型限制与净化规则。自定义内容模型里如果把附件字段只当字符串存起来,净化就没有生效位置,字段定义要与实际处理链路对齐。

常见问题

只允许位图不就行了? 位图也有历史上的解析型问题,且矢量格式在图标场景确实更省。真要收紧可以按字段限制类型,但业务需要图标上传时,净化比禁止更可维护。

净化之后还要求存储隔离吗? 建议。文件按对象存储或独立目录存放,访问路径不接受脚本执行,能降低净化遗漏带来的后果。

远程抓图会带进同类内容吗? 会。远程抓取与后台上传走的是同一份格式判断,任一处放行都要同步净化,否则抓取通道成为旁路。

相关文章

登录成功后的跳转地址由参数带来,不校验会被拿去做什么

登录回跳参数是外部可控输入,不做集中校验时,一个合法的登录流程会被改造成可信域到钓鱼页的跳板。本文说明这类跳转地址会被拿去做什么、白名单该挡哪几类取值,以及验证码与频率控制在登录链路上的分工。

2026-10-11

页面其实存在却一直返回 404,收录会受到什么影响

内容还在库里,前台却把页面判成不存在,搜索引擎收到的信号是资源消失,收录与流量都会跟着掉。本文说明统一错误码为什么危险,状态码按语义分流的几种情况,以及文档状态、伪静态规则、重定向和站点地图四处配置的排查顺序。

2026-10-11

站点升级时挂维护页返回 503,为什么比返回空白页更稳妥

MDN 的 503 文档写明该状态码表示服务器未准备好处理请求,常见原因是维护或过载,响应应仅用于临时状况并尽可能带上预计恢复时间的 Retry-After 首部;文档同时提示 503 表示临时问题,通常不应缓存。本文说明维护窗口里状态码、重试时间与缓存该怎么配。

2026-10-11

按请求头协商语言的站点加了缓存,译文为什么会发给用另一种语言的人

MDN 的 Vary 文档写明该响应头描述方法与 URL 之外影响响应内容的请求信息,包含 Vary 可确保响应依据所列首部字段分别被缓存,最常见用途是内容协商时构造缓存键。本文解释译文串给别的访客的成因、响应该怎么声明,以及多语言两种排法的差别。

2026-10-11

实测发现答案里最先被引用的常是清单靠前的条目,页面结构该怎么排

一项跨六个模型、二十五万次量级的实测显示,主题相关性与列表位置是决定来源被优先引用的主要因素,明确的价格信息与较新的时间戳也有持续帮助。本文把这些结论落到页面结构、内容模型与发布时间的排布方式上。

2026-10-11

有审计发现 AI 回答里的被引来源约一成多是模型自生成的,内容站该怎么看这个数

一项针对四个生成式搜索引擎的审计发现,被引来源中约 16% 是机器生成的合成来源。本文说明这个数字描述的是被引清单的构成,不是内容质量评分,并给出站端保持自身来源可辨的几处环节。

2026-10-11

第三方面板说开箱就能看出哪些 AI 服务在取内容,站方拿这份记录能做什么

这类面板提供的是网络层的抓取可见性:哪些 AI 服务在访问、有没有违反排除指令。本文说明这份记录能回答什么、不能回答什么,以及站方如何把它与自身的排除配置、站点说明文件和访问统计对齐后使用。

2026-10-11

访问量每次都实时写库,高并发下为什么会丢计数,聚合回写解决什么

每次访问都写库的计数属于读改写操作,并发下会互相覆盖造成增量丢失,未落盘就销账还会把已收的增量丢掉。本文说明聚合回写改的是哪一段、要兼顾的恢复能力,以及单机约 500 万 PV 这类官方口径该怎么读。

2026-10-11