🙆

DjangoのCSRF_TRUSTED_ORIGINSの設定を開発環境で検証する

2023/05/24に公開

Djangoを3から4にしたら、開発環境ではすべてのテストも通ったのにCloudRunの環境では「CSRF検証に失敗したため、リクエストは中断されました。」というエラーが、、、

要約

  • python manage.py runserverはhttp1.1
  • Cloud Run は http3
  • http1.1のときだけRequest headerにHost: localhost:8000が付与されていた
  • OriginとHostが一致しているとCSRF_TRUSTED_ORIGINSの確認なしでCSRF検証が通る

環境

  • Python 3.9.16
  • Django 4.2.1
  • Chrome

検証方法

開発環境でもhttp3で通信できるように、とかも考えましたが楽だったのでHost書き換えました。

これ使ってHostを書き換えて検証しました。
https://chrome.google.com/webstore/detail/modheader-modify-http-hea/idgpnmonknjnojddfkpgkljpfnnfcklj/related?hl=ja

さいごに

CSRF_TRUSTED_ORIGINS設定したらいいよ!はググればすぐ分かったんですが、開発環境で再現させたくて調べたので記事に残しました。

もっといい方法ありそうな気もする。

株式会社hitocolor

Discussion