Tag Archives: Djangoミドルウェア

Python

[Django] メッセージが追加されているかを判定する方法(改)

djangoのメッセージフレームワークを使っている場合の、メッセージが追加されているかどうかを判定する方法です。以前も同じ目的の記事を書きましたが、もっといいやり方があったのでメモしておきます。
read more »

Python

サーバーエラーでメールを送信する

Djangoでサーバーエラーが発生した場合に、エラー内容が記載されたメールを送信する方法です。「Django | Error reporting | Django documentation」のServer errorsというやつです。ただ、ちょっと付け加えないと動かなかったので、メモしておきます。
read more »

Python

DjangoのCsrfMiddlewareの注意点

DocumentのHow it worksに記載されていますが、Djangoの「django.middleware.csrf.CsrfMiddleware」はGETの場合はチェックをしていません。これは当然と言えば当然ですが、もしPOSTで送ったパラメータを「django.http.HttpRequest.REQUEST」を使って取得している場合は注意する必要があります。なぜならば、同辞書型の変数はまずはPOSTで送ったデータを見て、次にGETで送ったデータを参照するからです。そうすると、CSRFのチェックは回避しつつ、POSTで渡すデータと同じデータを渡せることになってしまいます。

read more »

Python

DjangoのCsrfMiddlewareに関する注意点

DjangoのCsrfMiddlewareは純粋にCSRFの防止機能を持っています。つまり、多重サブミットをチェックする機能は持っていません。そのため、リロードの対策などは別途用意する必要があります(リダイレクトとか)。

上記は当然の話なのですが、JavaのThe Struts Frameworkを使ってWEBアプリケーションを組んでいると、CSRF対策と言えば「org.apache.struts.action.Action」クラスの「saveToken」メソッドなどを使い(トランザクショントークン)、これがCSRF対策も多重サブミットも防止してくれています。これに慣れていると、CSRF対策でtokenのリセットなどもやってくれると勘違いしてしまうことがあるかもです。

Python

Djangoのメッセージフレームワークの使い方

Djangoにはクッキーベース(セッションも)のメッセージフレームワークが用意されています(The messages framework)。これを使うと、リダイレクト先でエラーメッセージを表示させたりするのに便利です。使い方は以下の通りです。
read more »