メインコンテンツまでスキップ

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 実装はプログラミング言語エンジンのパーサに依存せず, クエリの構文全体を実装する必要があります.

可用性への攻撃は, 特定実装が特定ケースで示す異常に高価な実行時性能を誘発しようとするかもしれません. ([RFC8949] 第10節はハッシュ表実装の問題, [RFC9485] 第8節は正規表現実装の性能問題を参照.) 実装者は, 平均性能が良好でも, 攻撃者が特別に細工した JSONPath クエリやクエリ引数を提出して, 驚くほど高い CPU 使用 (指数関数的な場合も), または naive な descendant segment の再帰実装によるスタックオーバーフローなどを誘発できる限り不十分であることを認識する必要があります. 実装はこれらの攻撃を緩和する適切なリソース管理を備える必要があります.

4.2 Attack Vectors on How JSONPath Queries Are Formed (JSONPath クエリの形成方法に対する攻撃ベクトル)

JSONPath クエリはしばしば静的ではなく, インデックス値, メンバ名, またはフィルタ式での比較値を与える変数から形成されます. これらの変数は検証 (例: 与えられた値が許す場合に限り .name のような特定構造を形成する) と変換 (例: 文字列区切り子のエスケープ) が必要です. これらの検証と変換を正しく行わないと予期しない失敗につながり, 特に敵対者が値を制御する場合 (例: Web フォームへの入力), 可用性, 機密性, 完全性の侵害につながりうます. 結果として得られる攻撃クラスである injections (注入) (例: SQL 注入) はアプリケーションセキュリティ脆弱性の主要因として一貫して挙げられ, 特に注意が必要です.

4.3 Attacks on Security Mechanisms That Employ JSONPath (JSONPath を用いるセキュリティ機構に対する攻撃)

JSONPath がセキュリティ機構の一部として用いられる場合, 攻撃者は予期しないまたは予測不能な振る舞いを誘発しようとするか, JSONPath 実装間の振る舞いの差を利用しようとするかもしれません.

予期しないまたは予測不能な振る舞いは, [RFC8259] が予測不能と記述する構造を持つクエリ引数から生じうます. オブジェクトの順序付けに関してを除き, [RFC7493] に適合するクエリ引数に対しては予測可能な振る舞いが期待できます.

他の攻撃は UTF-8 ([RFC3629] 第10節) や Unicode 文字集合など下位技術の振る舞いを標的にする場合があります.