GitHub の Django で機密情報を保護する

Vaibhav Vaibhav 2022年1月23日
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 にアップロードしない限り、情報は安全になります。さらに、変数が以前に存在していた場所にそのまま残っているため、プロジェクトも中断しません。変更されたのは、値の割り当て方法だけです。

著者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.