Re-examine Cache-control Directives

OWASP ZAPで「Re-examine Cache-control Directives」というアラートが報告された場合、これはサイトのHTTPヘッダーに設定されたキャッシュコントロールディレクティブに関する問題を指摘しています。適切なキャッシュコントロールが設定されていないと、機密情報がキャッシュされてしまう可能性があり、セキュリティリスクとなることがあります。

この問題を解消するためには、以下の手段を検討してください:

1. キャッシュコントロールディレクティブの確認と設定

HTTPレスポンスヘッダーに適切なキャッシュコントロールディレクティブを設定することが重要です。以下は一般的に推奨される設定例です。

機密情報を含むページの場合

機密情報を含むページ(ログインページやユーザー情報ページなど)はキャッシュされないようにする必要があります。

Cache-Control: no-store, no-cache, must-revalidate, private
Pragma: no-cache
  • no-store: 完全にキャッシュを禁止します。
  • no-cache: キャッシュされたコンテンツの再検証を強制します。
  • must-revalidate: キャッシュされたコンテンツが古くなった場合に再検証を強制します。
  • private: 特定のユーザーにのみ表示される内容をキャッシュしないようにします。

静的コンテンツの場合

画像やCSSファイル、JavaScriptファイルなどの静的コンテンツは、適切にキャッシュを設定することでサイトのパフォーマンスを向上させることができます。

Cache-Control: public, max-age=31536000
  • public: キャッシュがすべてのユーザーに対して有効であることを示します。
  • max-age=31536000: コンテンツを1年間(秒単位で指定)キャッシュします。

2. サーバー設定の確認

ウェブサーバーの設定ファイルを確認し、適切なキャッシュコントロールディレクティブを追加します。例えば、ApacheやNGINXを使用している場合の設定例です。

Apacheの場合

httpd.confまたは.htaccessファイルに以下の設定を追加します。

<FilesMatch "\.(html|htm)$">
    Header set Cache-Control "no-store, no-cache, must-revalidate, private"
    Header set Pragma "no-cache"
</FilesMatch>

<FilesMatch "\.(css|js|jpg|jpeg|png|gif|ico|svg)$">
    Header set Cache-Control "public, max-age=31536000"
</FilesMatch>

NGINXの場合

nginx.confファイルに以下の設定を追加します。

location ~* \.(html|htm)$ {
    add_header Cache-Control "no-store, no-cache, must-revalidate, private";
    add_header Pragma "no-cache";
}

location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg)$ {
    add_header Cache-Control "public, max-age=31536000";
}

3. WordPressプラグインの利用

WordPressサイトの場合、キャッシュ制御を簡単に管理できるプラグインを利用することも検討できます。以下のプラグインが役立つかもしれません。

  • W3 Total Cache: キャッシュ制御やパフォーマンス最適化に役立つ多機能プラグイン。
  • WP Fastest Cache: キャッシュ管理が簡単であり、設定がしやすいプラグイン。
  • Cache Control by WPExperts: キャッシュヘッダーを簡単に設定できるプラグイン。

これらの手段を実施することで、OWASP ZAPの「Re-examine Cache-control Directives」というアラートを解消し、ウェブサイトのセキュリティとパフォーマンスを向上させることができます。