Djangoとセキュリティ

こんにちは。Pythonのフレームワークとして人気が高いDjangoについて紹介していきたいと思います。Djangoとは主にWEBアプリケーション制作に適したフレームワークでログイン機能やダイレクトメッセージ機能といった、SNSにはけっして欠かすことができない機能が予め用意されています。ですので、普通のWEBサービスであれば新しく外部からパッケージをインポートする必要がないのが魅力です。

そもそもDjangoを使ったWEBアプリって何があるの?といった疑問があると思います。実はあまり知られていませんがGoogleの検索フォームであったりYoutubeはDjangoで作られています。それだけでもこのフレームワークの拡張性や利便性は伝わると思うのですが、Djangoの魅力はそれだけではありません。それは長年IT従事者たちお悩みのタネとなっていたセキュリティ問題を解決してくれるということです。セキュリティ対策としてはたくさん種類があるのですが主な対策をいくつかご紹介します。

クロスサイトスクリプティング(XSS)対策

XSSとはユーザーが悪意のあるスクリプト(コード)をデータベースに保存することによって他のユーザーがそのスクリプトを表示、検索、クリックしたときにいたずらをする攻撃方法です

Djangoの対策
XSS攻撃における対策としてはユーザーがデータベースに何かを保存するときにしっかりとサニタイズする必要があります。サニタイズ(Sanitize)とは汚れたものなどをきれいにする作業です。もし悪質なデータが保存されそうになったらそれを察知し除去していきます。一見難しそうなプログラムかと思われますがDjangoがすでに防御策や制限対策を行っているのでプログラマー自身は特に何もすることはありません。

クロスサイトリクエストフォージェリ(CSRF)対策

CSRFとは別名リクエスト強要とも呼ばれておりユーザーのSNSなどのログイン維持状態をうまく利用したとても悪質な攻撃です。具体的なケースとしてはユーザーが罠のURLをクリックしたときに攻撃が発動しログイン中のSNS上にユーザーが意図していない書き込みがされていたり、個人情報が公開されていたりします。これがCSRF攻撃です。ここでポイントとなるのはログインしている状態というのは書き込みやプロフィール編集といったSNSでの機能を自由に使う権限を持っている状態でそれを逆に利用されているといことです。これはとても悪質でありIT従事者はこの攻撃に対してより慎重に接していかなければなりません。

Djangoの対策
Djangoは様々な種類のCSRF対策を備えておりPOST methodなどサーバーに対するリクエストに制限をかけており、ユーザーがログインしているからといって安直に書き込みなどができないようになっています。主な仕様としてはナンスと呼ばれる鍵(key)のようなものを使って本当にユーザーが書き込みをしたのかを検証していきます。つまりその悪意のあるハッカーはそのナンスを持っていなければいけません。これがDjangoで行われるCSRF対策です。

クリックジャッキング対策

クリックジャッキングとはとても巧妙な手段でユーザーに不快感を与えたり、ユーザーが意図しない行為を実行させたりします。具体的な攻撃パターンとしてはサイト内に透明なボタンを設置し、ユーザーはそれに気付かずクリックし別サイトに誘導させられます。このケースの攻撃は近年より巧妙化しそれで困っている会社も多いそうです。

Djangoの対策
Djangoはこのクリックジャッキングに関してはX-Frame-Options middleware(ミドルウェア)を使うことで防いでいます。これによって悪意のあるユーザーが他のユーザーをターゲットサイトに誘導することができなくなっています。

SQLインジェクション対策

SQLという言葉はプログラマーやIT従事者であれば馴染みの深い単語だと思います。そうです、SQLはデータベースを操作する言語です。データベースに新しくデータを追加したり削除したりできます。そういったWEBアプリの中核を担う言語だからこそ逆に利用されてしまいます。このSQLインジェクションはハッカーにとっては常套手段で情報セキュリティ関連の事件はSQLインジェクションによって起きることが多いです。

Djangoの対策
データベースから取得したデータ(クエリセット)はパラメータ化せれて構成されているので直接的なSQLインジェクションから守られています。しかし、SQLを実行するときは当たり前ですがエスケープなどの基本的な処理を行います。