You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子模式中使用$id的安全风险及相关JSON Schema规范咨询

问题解答

1. JSON Schema规范中关于$id映射持久化的相关章节

在JSON Schema Draft 2020-12核心规范的8.2.2 注册标识符章节中明确规定:

当在评估过程中遇到包含$id关键字的模式对象时,实现必须将其解析后的标识符(基于当前基础URI)注册到当前评估上下文的模式注册表中,映射到该模式对象本身。此注册在评估上下文的生命周期内是永久的;后续对模式对象的修改(包括移除或修改$id关键字)不会影响已有的注册条目。

这正是Jason Desrosiers所说“移除$id后映射仍不会消失”的规范依据。

2. 子模式使用$id的安全风险与恶意利用可能性

子模式中使用$id本身是JSON Schema的合法用法,用于定义可被引用的模块化子模式,但在特定场景下存在安全风险,其持久化映射的行为也可能被恶意利用:

  • 抢占式注册攻击:如果验证环境的模式注册表是共享的(比如多用户的验证服务、复用评估上下文的系统),攻击者可以构造包含$id的恶意子模式,抢先注册一个被广泛使用的URI(例如某个公开标准模式的地址)。后续合法模式引用该URI时,会被解析到恶意注册的模式,而非预期的标准模式,导致验证逻辑被篡改。
  • 上下文复用漏洞:若服务端未在每次请求后正确清理评估上下文的注册表,之前请求中注册的恶意$id映射会被保留。后续请求的验证会误用这些残留的映射,导致正常的验证逻辑失效或被劫持。
  • 意外的模式污染:在本地或客户端环境中,如果多次加载不同模式但复用同一个注册表,旧模式中$id的持久化映射可能会干扰新模式的引用解析,导致验证结果不符合预期——这种情况虽不算“恶意利用”,但属于设计不当带来的安全隐患。

规范要求同一个标识符只能被注册一次,后续注册不会覆盖已有条目,因此主要风险集中在抢先注册和上下文未清理的场景中。

内容的提问来源于stack exchange,提问作者Roger Costello

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:20:04