GitHub の Django で機密情報を保護する
プロジェクトとソフトウェアを構築し、GitHub で世界と共有することは、楽しくエキサイティングなプロセスです。エキサイティングで魅力的な機能をアプリケーションに追加し、git を使用してコードを GitHub にプッシュすることを楽しみにしています。それでも、ソフトウェア開発の最も重要な側面の 1つであるセキュリティを忘れがちです。
ソフトウェアを構築するときは、ソフトウェアが安全であり、データ侵害の潜在的な抜け穴がないことを確認する必要があります。
Web フレームワークである Django には、堅牢なセキュリティが付属しています。Django の認証システムは強力です。Django には、ほとんどの機密データが存在する settings.py
があります。したがって、そのようなファイルを GitHub に保存することは危険な決定になる可能性があります。
しかし、心配しないでください。GitHub にコードをプッシュし、同時に安全性を確保する方法はいくつかあります。
環境変数を使用して Django の機密情報を保護する
環境変数は、値がプログラムの外部に格納され、情報にアクセスするためにプログラムから読み取られる変数です。これらの変数は .env
ファイルに保存されます。
まず、ファイル .env
を作成します。次に、.gitignore
ファイル内に .env
を追加します。この追加により、.env
ファイルが GitHub にアップロードされないようになります。
次に、これらのファイルを処理するための Python パッケージが必要になります。パッケージ名は Decouple
です。次の pip
コマンドを使用してパッケージをインストールします。
pip install python-decouple
または、
pip3 install python-decouple
.env
ファイル内に機密情報を追加します。この情報には、Django プロジェクトの秘密鍵、データベースのクレデンシャル、メール ID とパスワード、API キーなどがあります。DecouplePython Package は、Django プロジェクト内でこのファイルを自動的に検索します。
以下の方法で情報を保存します。同じ構文に従っていることを確認してください。=
記号の前後にスペースを含めたり、文字列を表す引用符を追加したりしないでください。
SECRET_KEY=abcdefghijklmnopqrstuvwxyz0123456789
DEBUG=True
DATABASE_NAME=HELLO_DJANGO
DATABASE_USERNAME=U_HELLO
DATABASE_PASSWORD=hA8(scA@!fg3*sc&xaGh&6%-l<._&xCf
DATABASE_HOST=127.0.0.1
DATABASE_PORT=127.0.0.1
WASD_API_KEY=abcdefghijklmnopqrstuvwxyz0123456789
PQRS_API_KEY=abcdefghijklmnopqrstuvwxyz0123456789
EMAIL=qwerty@wasd.com
PASSWORD=abcdefghijklmnopqrstuvwxyz0123456789
上記のように、私たちは一般的に、すべての機密データを settings.py
ファイルに保持する必要があります。ここでも同じことを行いますが、値を直接追加することはありません。作成したばかりのこの .env
からそれらを読み取ります。
settings.py
内で、次のように上記の値を取得できます。
import os
from decouple import config
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = config("SECRET_KEY") # Here
DEBUG = config("DEBUG", cast=bool) # Here
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql_psycopg2",
"NAME": config("DATABASE_NAME"), # Here
"USER": config("DATABASE_USERNAME"), # Here
"PASSWORD": config("DATABASE_PASSWORD"), # Here
"HOST": config("DATABASE_HOST"), # Here
"PORT": config("DATABASE_PORT", cast=int), # Here
}
}
WASD_API_KEY = config("WASD_API_KEY")
PQRS_API_KEY = config("PQRS_API_KEY")
EMAIL = config("EMAIL")
PASSWORD = config("PASSWORD")
config
には、値をキャストするデータ型を定義する cast
パラメータがあります。デフォルトでは、Decouple はすべての値を文字列として読み取ります。したがって、この cast
パラメータを使用して、値を目的のデータ型にキャストできます。
それでおしまい。これで、すべての機密データが .env
ファイルで安全になり、このファイルを GitHub にアップロードしない限り、情報は安全になります。さらに、変数が以前に存在していた場所にそのまま残っているため、プロジェクトも中断しません。変更されたのは、値の割り当て方法だけです。