文章目录
文章目录
本文目录
本文目录

文档保存回调验签通过,为什么还要检查下载目的地?

石墨办公 + AI

接收可信通知与后端主动取文件是两次请求。按真实保存契约分别核对目标许可、重定向和实际连接,再确认产物与业务存储。

文档保存回调验签通过后,如果业务服务还要根据其中的地址下载文件,应再检查下载目的地。来源认证回答“这次回调是否满足约定来源的契约”,不能直接回答“业务服务可以连接这个地址,以及它随后跳转到的任何服务”。

本文面向负责在线编辑器存储接入的开发者,仅讨论实际协议中存在“接收通知,再主动取文件”的流程。不同产品的保存方式并不相同,不能先假设所有回调都携带下载地址。下述测试均为授权隔离环境中的设计,未发送回调或访问任何测试目标。

先把接收通知与主动取文件画成两条请求

一份公开的保存流程说明展示了这样的分工:编辑服务通过回调通知存储服务,并提供修改后文件的链接,存储服务再下载并保存。它只能证明这一类流程确实存在,不能据此推定其他产品的字段名、回调时机或存储架构。

接入方应从所用版本的正式协议确认:谁产生取文件地址,哪些环节能改变它,地址是否在受签范围内,以及后端由哪个组件发起下载。若协议返回的是文件标识,就按正式接口解析,不要自行增加一个接受任意网址的通用下载入口。

例如在一个假设流程中,服务收到通知,取出文件地址,再交给 HTTP 客户端。通知内容真实,不意味着该客户端访问的所有服务都属于本次保存范围。应分别保留入口认证结果、目标许可判断和实际请求结果,而不是合成一个“回调正常”。

目标许可按服务关系定义

OWASP 的 SSRF 防护指南区分了只访问明确受信应用与访问任意外部地址两种情况。文档回存若只需要从已知编辑服务取文件,应优先围绕明确的服务关系定义许可范围,不把一个有限集成扩展成任意地址代理。

这份范围至少要能由实现方回答:允许的协议、服务主机和端口是什么,文件路径或对象范围怎样对应当前业务,以及解析后实际连接的地址是否仍在批准范围。字符串前缀相似、使用 HTTPS,或地址能被解析,都不足以单独证明它获准。

私有部署中,业务服务访问已批准的内网编辑或存储服务可以是正常需求。因此不能照搬“一律拒绝私网”的配置,也不能反过来允许整个内网。应按实际服务路线和业务对象核定范围,未确认的地址保留为待核。

初始地址合格,跳转之后仍要判断

MDN 的 SSRF 说明提醒,重定向可能让请求越过初始地址检查。下载客户端若自动跟随跳转,最后访问的服务可能已不是原先获准的目标。

项目不需要跳转时,明确关闭自动跟随;确实需要时,逐跳重新核对目的地并限制跳转链。测试中可以让一个已批准的模拟服务返回跳转,目标指向另一个由团队控制但未列入许可的模拟服务,观察是否在发起下一跳之前停止。这里不需要用真实内网管理地址或敏感服务充当样本。

域名检查还要落实到连接阶段。前述 OWASP 指南要求约束实际连接的解析地址,并把同样的目的地策略用于重试和备用连接。一次独立 DNS 预检,不能证明 HTTP 客户端随后连接时仍使用获准结果;具体做法需结合所用客户端、代理和网络出口验证,不能靠修改 Host 头冒充安全连接。

入站通知先按正式协议验证来源;后续下载另查目标、每次跳转及实际连接地址;取到字节后仍须验证产物并确认业务存储。
原创请求边界示意,不表示任何产品内部实现或测试结果。

让下载组件只有完成本任务所需的出口

应用中的目标判断与网络出口限制应相互配合。由网络和实施人员确认下载组件可访问哪些服务、经过什么代理,以及实际出口在哪里执行限制;不能仅凭应用代码里出现一个允许列表,就声称其他路径也受同样约束。

下载所需的认证材料也应按目标和接口契约配置。不能把收到的所有请求头原样转发给下载目标,或把业务服务的通用凭据附在每次跳转上。记录诊断信息时,不保留真实会话值、签名下载地址的完整查询参数或文档正文。

验收时分别改变来源与目的地

在授权隔离环境准备两项模拟服务、假文件和测试身份,先定义允许的路径,再执行下面的用例。它们是待执行条件,没有任何实测通过结论。

回调下载边界的待执行用例
条件应观察的边界不能据此宣称
来源有效,直接目标获准按约定取到预期假文件任意地址均可下载
来源有效,目标未获准下载发起前拒绝并记录原因验签成功等于目的地授权
获准目标跳往未获准服务下一跳发起前阻止只检查最初URL已经足够
取文件成功,业务存储失败保留未完成状态和恢复线索HTTP成功等于回存完成

每条记录分别列出来源验证、目标判断、真实请求路线、产物核验与存储确认;证据不足的阶段保留未知。取回字节后,还需按本次保存契约核对文件身份、类型与业务归属。这个检查不替代已有的事件去重、顺序控制或保存完成验证。

评估石墨办公文档中台私有部署与现有存储接入时,可带上真实保存协议、服务间路线和两项模拟服务的用例设计,预约接入演示。先确认项目是否有主动取文件环节,再约定由谁执行目标许可与失败处理;本文不推定产品采用任何具体下载字段或客户端实现。也可以先看私有化部署方案,了解部署形态与交付范围。