×
サイバー攻撃について

18. DjangoでCSRF 403が発生したときの原因

代表的な原因は次のとおりです。

原因確認箇所
{% csrf_token %}がないHTMLフォーム
Cookieが送られていないブラウザ開発者ツール
X-CSRFTokenがないFetch・Axios
Originが不一致リクエストヘッダー
CSRF_TRUSTED_ORIGINS不足settings.py
HTTPとHTTPSが混在Nginx、Cloudflare
Hostが正しく伝わらないproxy_set_header Host
X-Forwarded-Protoが不正Nginx、Django
Referrer-Policyがno-referrerレスポンスヘッダー
CSRF CookieがSecureなのにHTTP接続URL、TLS
ログイン後に古いトークンを送信SPA、キャッシュ
フォームが外部Originを向いているaction属性

DjangoはHTTPSでOriginがない場合、厳格なReferer検証を行います。

サイト全体へ次の設定を付けると、安全でないメソッドのフォーム送信が失敗することがあります。

Referrer-Policy: no-referrer