Koki's personal blog

Koki's personal blog

Another fine, responsive site template by HTML5 UP.

Djangoの全ページのレスポンスに対しキャッシュを禁止する方法

この記事では、Djangoの全ページのレスポンスに対しキャッシュを禁止する方法について説明します。

Koki

3 分で読めます

この記事では、Djangoの全ページのレスポンスに対しキャッシュを禁止する方法について説明します。

この記事の内容です。

対象読者

  • Djangoの全ページでキャッシュ利用を禁止にしたい方

環境

  • Django (version 4.1.2)

前提条件

  • なし

Djangoの全ページでキャッシュを禁止にする

何故、この対応が必要なのか?

ざっくり書くと「キャッシュサーバーがキャッシュを持つことが原因で、見られたくない情報が他人から見れてしまうのを防ぐため。」です。

丸投げになりますが、ここらへんを読むと何故必要なのかの理解が深まるのかなと思います。

また、以下の本の
4.15 共有資源やキャッシュに関する問題
でも細かく説明されているので、是非購入し読んでみてください。
本書はキャッシュ対策以外のことも説明されているので、Webアプリ開発時のセキュリティ対策全般の勉強になります。(以下リンクにアフィリエイトの設定は行っていません。)
体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践

全ページでキャッシュを禁止にする方法

参考にしたページの内容とほぼ同じですが、以下の設定を行います。

1. conf/settings.pyへの設定追加

conf/settings.pyのMIDDLEWAREリストへ、後ほど作成するミドルウェアを登録します。

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    '[アプリ名].middleware.nocache.NoCacheMiddleware', # これを追加
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

2. ミドルウェアの作成

アプリのルートディレクトリにmiddlewareディレクトリを作成し、その中にnocache.pyを作成します。
そして、nocache.pyの中に以下のコードを書きます。(コピペします。)

from django.conf import settings
from django.utils.deprecation import MiddlewareMixin


class NoCacheMiddleware(MiddlewareMixin):
    def process_response(self, request, response):
        response['Cache-Control'] = 'private, no-store, no-cache, must-revalidate'
        return response

これだけでアプリの全ページへアクセスした際のResponseに、上記で設定したキャッシュ利用を禁止する設定が追加されるようになります。

参考にしたページ

Djangoで全ページキャッシュ禁止にする方法 - まっしろブログ
WSGIサーバで動作させているDjangoのWebサイトで、全ページにHTTPヘッダーを付加し、キャッシュ禁止にする方法を紹介します。
bicstone.me
No Image

最近の投稿

カテゴリー