跳到主要内容

4. Security Considerations (安全考量)

4. Security Considerations (安全考量)

JSONPath 的安全考量可能来自:

  • 针对 JSONPath 实现的攻击向量,

  • 针对 JSONPath 查询构造方式的攻击向量, 以及

  • JSONPath 在安全相关机制中的使用方式.

4.1. Attack Vectors on JSONPath Implementations (针对 JSONPath 实现的攻击向量)

历史上, JSONPath 常通过将查询的一部分交给底层编程语言引擎实现, 例如 JavaScript 的 eval() 函数. 众所周知该方法会导致注入攻击, 需要完美的输入验证才能防范 (JSON 本身有类似考量, 见 [RFC8259] 第 12 节). 相反, JSONPath 实现需要完整实现查询语法, 不得依赖编程语言引擎的解析器.

针对可用性 (availability) 的攻击可能试图触发某些实现在某些情况下异常昂贵的运行时性能. (哈希表实现相关问题见 [RFC8949] 第 10 节, 正则实现性能问题见 [RFC9485] 第 8 节.) 实现者须知, 只要攻击者可提交精心构造的 JSONPath 查询或 query argument 以触发异常高, 可能指数级的 CPU 使用, 或例如通过朴素的 descendant segment 递归实现导致栈溢出, 仅有良好的平均性能并不足够. 实现需要适当的资源管理以缓解此类攻击.

4.2. Attack Vectors on How JSONPath Queries Are Formed (针对 JSONPath 查询构造方式的攻击向量)

JSONPath 查询常常不是静态的, 而是由提供 index 值, 成员名或 filter expression 中比较值的变量构成. 这些变量需要验证 (例如仅当给定值允许时才允许构成 .name 等特定构造) 与转换 (例如转义 string 定界符). 未正确执行这些验证与转换可能导致意外故障, 进而可能导致可用性, 机密性与完整性破坏, 尤其当对手控制这些值时 (例如通过 Web 表单输入). 由此产生的攻击类别 injections (注入) (例如 SQL 注入) 始终是应用安全漏洞首要原因之一, 需要特别关注.

4.3. Attacks on Security Mechanisms That Employ JSONPath (针对采用 JSONPath 的安全机制的攻击)

若 JSONPath 作为安全机制的一部分使用, 攻击者可能试图引发意外或不可预测行为, 或利用 JSONPath 实现之间的行为差异.

意外或不可预测行为可能来自 [RFC8259] 描述为不可预测的 query argument 构造. 除 object 排序外, 对符合 [RFC7493] 的 query argument 可预期可预测行为.

其他攻击可针对底层技术行为, 例如 UTF-8 (见 [RFC3629] 第 10 节) 与 Unicode 字符集.