djangoで、<form method=”post”>{% csrf_token %}を無効にしたい時の処理を紹介します。
「え?なんでわざわざcsrfを無効にするのかって?」そこも含めて丁寧に説明をし、最終的に無効にできるコードも紹介していきます。
コンテンツ
csrfとは
正式名称は、クロスサイトリクエストフォージェリ (CSRF) と呼びます。
ざっくり言えば、postのような直接データベースに変更を加えるような複雑な処理を暗号化して、簡単に外部に漏れないような処理を対策することにあります。
csrf_tokenを渡さないと
csrf_tokenを渡していないpostメソッドは以下の添付のように403エラーが発生します。
けれども、どうしてもcsrf_tokenをつけたくない!!無効化したい!!っていう時があります。
使用するとき
Djangoでは外部URLのPOSTでは{% csrf_token %}が推奨されていません。
https://docs.djangoproject.com/en/3.2/ref/csrf/#module-django.middleware.csrf
例えば、外部のURLを対象にするpostフォームではCSRFトークンが外部に漏れ、脆弱性の原因となるのを防ぐため、{% csrf_token %}を無効にする必要があります。
以下、実際にcsrf_tokenの処理を無効にして実装した例題があります。
post時のcsrf_tokenを無効にする方法
実際のhtml側では何もする必要はありません。
sample.html
1 |
<form method="post">{% csrf_token %}</form> |
サーバー側のviewsで@csrf_exemptというデコレーター関数を付け加えることで、csrf_tokenを無効にすることができます。
1 2 3 4 5 6 7 8 |
from django.views.decorators.csrf import csrf_exempt @csrf_exempt def sample(request): . . . return render(request, sample.html) |
こんだけ。
これで無効化できます。
以上。
参考
https://docs.djangoproject.com/ja/2.2/ref/csrf/
最後に
いかがでしたでしょうか。
以上が、「【Django】post時のcsrf_tokenを無効にする」の紹介記事になります。
プログラミング学習を効率良く進めるには…
私ヒロヤンがプログラミングを始めた頃は以下のような感じでした。
そしてネットで調べていくうちに膨大な時間が過ぎていきました。
私ヒロヤンの実体験より、プログラミングを効率的に学ぶために大切なことは以下のことだと考えています。
1. いつまでもダラダラとやらないで、目標を決定して短期集中する
2. マンツーマンで、わからない箇所は直ぐに質問をして即レスをもらう
.proでは私ヒロヤンが学習してきたプログラミング経験0からのpython/django、その他webサイト・サービス開発のコースが用意されています。
カウンセリング自体は無料なので話を聞いてみるだけでもいかがでしょうか?
また以下のリンク先ではdjangoを教えてくれるスクールをまとめ紹介しています。
コメントを残す