AI 工作流有哪些与节点、状态和恢复机制相关的安全风险?
未标记
考查重点:状态污染、权限继承与恢复风险。恢复时重放写操作可能重复扣款,跨节点共享状态也可能带入越权参数;在实际执行处重验身份、版本与幂等键
本题目录
参考答案
核心回答
AI 工作流的风险集中在不可信内容跨节点传播、权限随状态被错误继承,以及恢复时重复执行副作用。一个节点的模型输出可能成为下一个工具的参数;保存下来的状态也可能包含旧权限、过期链接或已经执行过的动作。图能继续运行,不代表当前请求仍然有权执行同样的操作。
我会把节点的数据契约、资源授权和执行记录分开:状态传递业务内容,服务端认证上下文确定身份,工具执行处检查具体资源与操作,恢复时根据稳定动作标识确认哪些事情已经发生。
跨节点传参会带来什么风险
模型从网页、文档或工具结果中读到的内容都可能被污染。若下一个节点直接使用其中的租户 ID、目标 URL 或“已经批准”字段,外部内容就越过了信任边界。结构合法也不代表参数属于当前用户。
节点应只读取需要的字段,区分资料正文与控制参数;身份、租户、工具范围由服务端提供。执行数据库、文件或写接口前,再校验对象归属、业务状态与操作权限。子流程也应明确传入哪些变量、历史和文件,避免共享完整父状态。JavaGuide 的 LLM/Agent 安全说明区分了结构、业务与资源权限校验。
附件同样需要区分稳定文件身份和临时访问地址。知道一个文件名或对象 ID 不等于有读取权限,签名链接也不应成为跨用户共享状态中的长期授权凭据。服务端下载外链时,还要限制协议、目的地址、重定向、大小与超时;域名白名单不能单独证明 DNS 和连接阶段安全。OWASP 授权原则、SSRF 防护。
恢复与重试为什么需要额外检查
暂停前拥有权限,恢复时可能已经失效;流程版本、资源状态和人工确认的参数也可能变化。恢复入口应校验执行实例归属,绑定预期定义版本,并在敏感操作前重新判断当前授权和业务条件。检查点只是执行记录,不能替代授权决定。
另一个风险是副作用已经成功,执行器却在保存结果前退出。恢复后重放同一节点,可能再次发消息或创建订单。应为同一逻辑动作复用稳定幂等键,在副作用边界用唯一约束或下游幂等接口防重;结果未知时先查询和对账。迁移运行中实例也要处理节点映射、变量兼容和已完成动作,不能只改版本号。
怎样验证这些边界
用能区分失效位置的用例:将别人的文件 ID 放入参数、让文档包含修改工具目标的指令、暂停后撤销资源权限、替换流程版本,以及在外部写成功但状态未保存时恢复。分别检查是否拒绝越权、是否泄漏到上下文和日志、是否重复产生业务动作。不能仅以工作流“成功结束”判断安全。
FastGPTTypeScript
核心回答
FastGPT 的子应用调用需要同时控制子应用能使用哪些资源和这次能看到哪些文件。父流程能运行,不表示子应用可以读取父流程所有附件;一个 URL 能被解析,也不表示它就是已经授权的内部文件。该版本通过版本资源上下文和派生文件上下文分别处理这两件事。
子应用会继承父应用的全部权限吗?
loadChildWorkflowWithResource() 先加载子应用及实际取得的版本,再根据该版本的资源清单创建独立 resourceContext。资源加载也有两条路径:命中版本快照清单的应用,按数据库实时存在、未删除及团队条件读取;未命中清单的动态资源,则按运行人的读权限检查,并限制团队范围。应用资源加载、子应用资源上下文。
这是一种版本资源授权与动态访问分开的设计,不能描述成“所有资源每次都按最终聊天用户的 ACL 重新验证”。如果业务要求权限撤销立刻影响已发布流程,应进一步核对发布授权、资源快照和当前执行身份之间的产品规则。
怎样防止父流程附件全部进入子流程?
在根文件上下文已经准备好的执行路径中,runWithDerivedWorkflowFileContext() 从本次问题、显式文件变量和所选历史挑选文件,按稳定身份去重并限制数量;当前输入优先于历史附件,再由父上下文 derive() 创建子文件上下文。从子文件上下文取得未被选入的文件引用会被拒绝;另行输入的 URL 仍可能走外链下载器,不代表所有网络读取都受这份名单控制。文件选择与隔离、未登记 URL 的外链路径。
内部文件的可信身份来自对象 key。根入口先校验 key 所属的来源、用户和会话范围,再生成模型可用链接;子流程只能继承父上下文已登记的私有文件引用,不能通过陌生 key 或伪造 URL 获得对象访问能力。签名 URL 是访问地址,文件身份和权限则保留在服务端引用中。根入口登记、子文件准入。
交互恢复和外链读取还能怎样追问?
子应用交互恢复会根据保存的交互信息重建运行节点、连线,并再次建立子变量及文件上下文。这不自动保证业务写操作只执行一次;如果子流程连接创建工单等工具,仍应由工具服务维护动作幂等和资源状态检查。恢复与上下文重建。
外链下载走 HTTP(S) 检查、超时和流式大小限制,并使用统一安全请求器:逐跳检查重定向,直连时复核 DNS 解析地址并将连接固定到已验证 IP。域名白名单是另一层可配置策略,留空会放行该层检查,不能据此忽略下游已有防护。外链下载、重定向处理、直连地址固定。
这些能力仍有部署边界:生产环境对回环、未指定地址和云元数据目标有基础阻断,其他私网限制受 CHECK_INTERNAL_IP 控制;开发和代理路径还需分别核验,代理最终解析不能由本机的地址固定保证。因此应按实际环境测试外链和恢复场景,不能声称所有部署都已安全验收。网络策略、代理分支。
对应教程
- 第 25 章:LangGraph 高级特性:恢复可能重复执行的解释适用于理解副作用风险;具体 FastGPT 上下文机制按上述源码说明。
参考资料
- 国内:JavaGuide:LLM/Agent 安全实战:采用不可信内容、控制参数、资源鉴权与副作用结果分别处理的边界。
- 国内:JavaGuide:数据与权限校验:采用结构校验不能代替对象级权限校验的解释。
- 国内:JavaGuide:状态机与工作流:采用定义版本、运行实例与任务尝试分开的设计,以及迁移和汇聚时的状态约束。
- 国内:zero2Agent:Agent Infra:采用副作用成功但状态保存失败时的稳定业务键、查询与未知结果处理。
- 国外:OWASP:Authorization:采用最小权限、请求级授权和不可依靠对象 ID 难猜来防止越权的原则。
- 国外:OWASP:SSRF Prevention:采用目的地址、DNS、重定向与网络出口联合控制的原则,区分域名匹配与连接安全。