0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

新人エンジニアが、DjangoのMiddlewareについて調べてみた

Last updated at Posted at 2024-12-25

1. IT用語のミドルウェアと、Djangoのミドルウェアの違い

前回の記事では、IT用語のミドルウェアについてまとめました。

ミドルウェアとは、「OSほど汎用的ではないが、多くのアプリケーションで必須となる機能を担うソフトウェア」を指す言葉で、アプリケーションサーバ、WEBサーバ、DBサーバなどが、代表的な例でした。

今回調べるのは、Djangoの機能として備わっている「ミドルウェア」です。
公式ドキュメントによると、Djangoのミドルウェアは「Django のリクエスト/レスポンス処理にフックを加えるためのフレームワーク」だそう。フックとは、プログラムの特定の処理の間に別の処理を追加することですので、この場合は、「Django のリクエスト/レスポンス処理に、別の処理を加えるためのフレームワーク」と解釈して良いと思います。

ミドルウェアは自作することもできるそうですが、今回は、私が関わっているプロジェクトに出てくるミドルウェアについて、いくつか調べてみようと思います。

2. 各ミドルウェアについて

django.middleware.security.SecurityMiddleware

SecurityMiddlewareは、Djangoアプリケーションのセキュリティを高めるために作用します。例えば、

  • HTTPリクエストをHTTPSにリダイレクトさせる
  • クライアントに、HTTPS通信を使うべきであることを通知する
  • XSS(クロスサイトスクリプティング)防止

などの機能を備えています。

django.contrib.sessions.middleware.SessionMiddleware

SessionMiddlewareは、ユーザーの情報を匿名のセッションとして管理するためのミドルウェアです。デフォルトでは、DBを使ったセッション管理を行いますが、キャッシュやファイル、Cookieを使った管理も可能です。なお、Cookieを使ったセッションデータは、署名されているため、データの改竄や喪失があった場合無効にすることができますが、暗号化はされていないため、クライアントは自由に読むことができます。

django.middleware.common.CommonMiddleware

CommonMiddlewareは、その名の通り、多くの一般的なWebアプリケーションで役立つ機能を提供しています。

  • DISALLOWED_USER_AGENTS:悪意のあるbotなど、リクエストを受け付けたくないユーザーのリストを作成することができます。
  • APPEND_SLASH:URL末尾のスラッシュがない場合、末尾にスラッシュのある有効なURLに書き換えて、リダイレクトを行います。
  • PREPEND_WWW:先頭にwwwがないURLを、wwwで始まる同じURLに書き換えてリダイレクトします。

django.middleware.csrf.CsrfViewMiddleware

CsrfViewMiddlewareは、CSRF(クロスサイトリクエストフォージェリ)対策を行うためのミドルウェアです。CSRFとは、ユーザーのログイン情報を悪用し、webアプリケーション上で意図しないアクションを行うように仕向けたり、意図しない権限でユーザーをログインさせたりする攻撃です。

公式ドキュメントによると、これらの攻撃を防御するための方法は、Getリクエストから副作用を取り除くこと、そして、POST、PUT、DELETEメソッドを使う時には、formでCSRFトークンを利用することが挙げられます。CsrfViewMiddlewareでは、これらを可能にするために、CSRFトークンを生成したり、検証を行ったりする機能が提供されています。

3. まとめ

settings.pyには、まだいくつか未知のミドルウェアがありますが…今月はここまでにして、そのうち続編を書こうと思います。メリークリスマス!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?