8. Security Considerations (セキュリティの考慮事項)
このセクションは, HTTP 条件付きリクエストに固有の既知のセキュリティ問題について開発者, 情報提供者, およびユーザーに通知することを目的としています。
Disclosure of Entity Tags (エンティティタグの開示)
エンティティタグは, 複数の中間サーバー間でのキャッシュ同期や, コンテンツのアーカイブスナップショットを識別する手段など, "本来の用途以外" の方法でよく使用されます。特定のリソースに対してエンティティタグがどのように生成されるかを理解することは, アプリケーション固有であり, 多くの場合独自仕様です。アプリケーションロジックや中間キャッシュの動作に関する情報を開示するエンティティタグの露出は, そのアプリケーションのアクセス制御を回避する方法や中間キャッシュを操作する方法に関する情報を明らかにする可能性があります。
オリジンサーバーは, 一部のエンティティタグが特定の状況下で機密と見なされる可能性のある情報を開示する可能性があることを考慮すべきです。例:
- バージョン管理情報 (例: リビジョン番号, ブランチ名)
- アクセス制限があるコンテンツから派生したハッシュまたは署名
- 内部実装の詳細を明らかにするパターン
Denial of Service Using Conditional Requests (条件付きリクエストを使用したサービス拒否)
条件付きリクエストは, キャッシュされた表現を再利用できるようにすることでネットワーク帯域幅と処理オーバーヘッドを削減できますが, サービス拒否攻撃に対する十分な保護ではありません。悪意のあるクライアントは, 異なるリソースに対して, または無効または絶えず変化する条件ヘッダーフィールドを使用して同じリソースに対して多くの条件付きリクエストを行い, サーバーの応答能力を圧倒する可能性があります。
サーバーは条件付きリクエストの使用を監視し, 異常なパターンが検出された場合にレート制限やその他の防御措置を検討すべきです。
Protocol Element Length (プロトコル要素の長さ)
サーバーは, 特に If-Match および If-None-Match ヘッダーフィールド内のエンティティタグについて, 条件ヘッダーフィールド値のサイズと数に合理的な制限を設けるべきです。エンティティタグ値には標準的な長さ制約がないためです。極端に長いエンティティタグまたは単一のヘッダーフィールド内の過剰な数のエンティティタグは, サーバーリソースを枯渇させるために使用される可能性があります。