キャッシュデセプションアーマー
キャッシュデセプションアーマーについて学ぶ前に、まずWebキャッシュデセプション攻撃がどのように機能するかを理解する必要があります。
Webキャッシュデセプション攻撃は、攻撃者がユーザーを騙してhttp://www.example.com/newsfeed/foo.jpgの形式のリンクを開かせるときに発生します。このとき、http://www.example.com/newsfeedは異なるユーザーに対して異なるコンテンツを返す動的スクリプトの場所です。
このシナリオは、あなたのウェブサイトが処理できるパスの種類に柔軟に設定されている場合に問題になります。具体的には、存在しないパス(例:/x/y/z)へのリクエストが、存在する親パス(例:/x)へのリクエストと同等に扱われる場合です。
例えば、攻撃者はユーザーにhttp://www.example.com/newsfeed/foo.jpgへのリンクを送信し、ユーザーが自分のニュースフィードにアクセスできるようにします。リクエストがCloudflareを通過すると、パスが.jpgで終わるため、リクエストはキャッシュされます。攻撃者はその後、同じURLに自分自身でアクセスし、そのリクエストはCloudflareのキャッシュから提供され、ユーザーの機密コンテンツが露出します。
キャッシュルールを作成することで、ユーザーをWebキャッシュデセプション攻撃から保護できます。このルールを使用すると、静的アセットのキャッシュを続けることができますが、ルールはURLの拡張子が返されたContent-Typeと一致することを確認します。
上記のニュースフィードの例では、http://www.example.com/newsfeedがウェブページを出力するスクリプトである場合、Content-Typeはtext/htmlです。一方、http://www.example.com/newsfeed/foo.jpgはContent-Typeとしてimage/jpegを持つことが期待されます。Webキャッシュデセプション攻撃を引き起こす可能性のある不一致が見つかった場合、Cloudflareはレスポンスをキャッシュしません。
- 返された
Content-Typeがapplication/octet-streamの場合、拡張子は重要ではありません。これは通常、ブラウザにアセットを表示するのではなく保存するよう指示する信号です。 - Cloudflareは、
.jpgをimage/webpとして、または.gifをvideo/webmとして提供することを許可しており、攻撃である可能性が低いと考えられる他のケースも含まれます。 - キャッシュデセプションアーマーはOrigin Cache Controlに依存していることに注意してください。オリジンからの
Cache-Controlヘッダー、Edge Cache TTLキャッシュルールまたはBrowser Cache TTLゾーン設定が保護を上書きする可能性があります。
キャッシュデセプションアーマーを有効にするには、まずキャッシュルールを作成する必要があります。以下の手順に従ってガイダンスを受けてください:
- Cloudflareダッシュボード ↗にログインし、アカウントとドメインを選択します。
- キャッシング > キャッシュルールに移動します。
- ルールを作成を選択します。
- 受信リクエストが一致する場合の下で、ルール式を定義します。
- 次にの下で、キャッシュの適格性セクションでキャッシュの対象を選択します。
- ルールにキャッシュキー設定を追加し、キャッシュデセプションアーマーをオンにします。
- ルールを保存して展開するには、展開を選択します。ルールを展開する準備ができていない場合は、下書きとして保存を選択します。