【Django】settings.py:Debug=Trueは本番環境公開前にFalseにすべき理由

時計 2020.08.10 / 時計

【Django】settings.py:Debug=Trueは本番環境公開前にFalseにすべき理由

この記事は、DjangoでWebアプリケーションを作成している方を対象としており、settings.py中に記載があるDebug設定について解説していきます。

Djangoをインストールした段階では、Debug=Trueとなっております。
この設定について説明しているチュートリアルは少ないため、この設定を気にせずに開発を進めている人も多いと思います。

しかし、開発段階では問題ありませんが、作成したWebアプリケーションを本番環境にデプロイするときには、このDebugの設定を変更する必要があります。

なぜ変更しなければならないのか?どんな影響が考えられるか?
それらについて以下で詳しく解説していきます。

Debug=Trueでの動作

settings.py内のDebug(デバッグモード)がTrueの場合は、どういった動作を行うのか。

みなさんWebアプリケーションを開発中に以下のような画面表示を1度は見たことがあるはずです。

DjangoのDebug=True時のエラー表示

この表示が出るということは、デバッグモードが有効になっているということです。

すなわちDebug=Trueの場合、エラー発生時にブラウザにエラー詳細表示をしてくれます。

Debug=Falseでの動作

Debug=Falseにすると、Trueのときのようにエラー詳細は表示されません。

そのためなにが悪いのかがわからないため、開発中はTrueであるべきなのはわかりますね。

ではなぜ、本番環境ではFalseにするべきなのでしょうか。

本番環境でDebug=Falseに変更する理由

もう薄々気づいている方も多いかと思いますが、DebugをFalseに変更する理由として、
エラー詳細情報からあなたのWebアプリケーションの情報が漏れることを防ぐためです。

APIやSIGNATURE、TOKENなど絶対に秘密にすべき情報は表示されないのですが、他の有益な情報を攻撃者に与えてしまう可能性があるので、基本的には本番環境ではDebug=Falseにする必要があるのです。

Debugを変更した際の注意点

Debug=TrueからFalseに変更すると、実はエラー詳細情報が表示されなくなるだけではないです。

Debug=Trueかつsettings.py内のALLOWED_HOSTSが空の場合、ALLOWED_HOSTS=['localhost', '127.0.0.1', '[::1]']が自動的に有効となります。

Debug=Falseにした場合、有効になっていたALLOWED_HOSTS=['localhost', '127.0.0.1', '[::1]']が無効になるため、ALLOWED_HOSTSが空のままだとWEBアプリケーションに接続できなくなります。

そのためDebug=Falseに変更したら、必ずALLOWED_HOSTSにサーバーのアドレスを指定する必要があります。

まとめ

今回のポイントを以下にまとめます。

今回のポイント

Debug=Trueでブラウザにエラー詳細が表示される

本番環境ではDebug=Falseにすべし!

Falseに変更したら、ALLOWED_HOSTSの指定を忘れずに!

上記のポイントを忘れずに、DjangoでのWebアプリケーション開発を進めていってください。