7. Security Considerations (セキュリティの考慮事項)
このセクションは、HTTPキャッシングに特有の既知のセキュリティ上の懸念について、開発者、情報提供者、およびユーザーに通知することを目的としています。より一般的なセキュリティの考慮事項は、「HTTP/1.1」([HTTP/1.1]のセクション11)および「HTTP Semantics」([HTTP]のセクション17)で扱われています。
キャッシュの内容は悪意のある悪用の魅力的なターゲットを表すため、キャッシュは追加の攻撃面を露出します。キャッシュの内容はHTTPリクエスト全体にわたって持続するため、キャッシュへの攻撃は、ユーザーが情報がネットワークから削除されたと信じているずっと後に情報を明らかにする可能性があります。したがって、キャッシュの内容は機密情報として保護される必要があります。
特に、プライベートキャッシュは単一のユーザーに制限されているため、ユーザーの活動を再構築するために使用できます。したがって、ユーザーエージェントがエンドユーザーにそれらを制御させることが重要です。たとえば、一部またはすべてのオリジンサーバーの保存された応答を削除できるようにします。
7.1 Cache Poisoning (キャッシュポイズニング)
キャッシュに悪意のあるコンテンツを保存すると、攻撃者の到達範囲が拡大し、複数のユーザーに影響を与える可能性があります。この「キャッシュポイズニング(Cache Poisoning)」攻撃は、攻撃者が実装の欠陥、昇格された特権、またはその他の技術を使用してキャッシュに応答を挿入するときに発生します。これは、共有キャッシュを使用して多くのクライアントに悪意のあるコンテンツを配布する場合に特に効果的です。
キャッシュポイズニング攻撃の一般的なベクトルの1つは、プロキシとユーザーエージェント間のメッセージ解析の違いを悪用することです。関連する要件については、[HTTP/1.1]のセクション6.3を参照してください。
7.2 Timing Attacks (タイミング攻撃)
キャッシュの主な用途の1つがパフォーマンスの最適化であるため、その使用は以前にどのリソースが要求されたかについての情報を「漏洩(Leak)」する可能性があります。
たとえば、ユーザーがあるサイトにアクセスし、ブラウザがその応答の一部をキャッシュした後、2番目のサイトに移動した場合、そのサイトは最初のサイトに存在することがわかっている応答をロードしようとすることができます。それらが速くロードされる場合、ユーザーがそのサイト、さらにはその上の特定のページを訪問したと仮定できます。
この「タイミング攻撃(Timing Attacks)」は、キャッシュキーにより多くの情報を追加することで緩和できます(たとえば、上記の攻撃を防ぐために参照サイトの身元)。これは「ダブルキーイング(Double Keying)」と呼ばれることがあります。
7.3 Caching of Sensitive Information (機密情報のキャッシング)
実装および展開の欠陥(多くの場合、キャッシュ操作の誤解による)により、機密情報(認証資格情報など)がキャッシュされ、それによって未承認の当事者に公開される可能性があります。
Set-Cookie応答ヘッダーフィールド[COOKIE]はキャッシングを抑制しないことに注意してください。Set-Cookieヘッダーフィールドを持つキャッシュ可能な応答は、キャッシュへの後続のリクエストを満たすために使用できます(そして多くの場合使用されます)。これらの応答のキャッシングを制御したいサーバーは、適切なCache-Control応答ヘッダーフィールドを発行することが推奨されます。