在 GitHub 上保護 Django 中的敏感資訊

Vaibhav Vaibhav 2021年6月29日
在 GitHub 上保護 Django 中的敏感資訊

在 GitHub 上構建專案和軟體並與全世界分享它們是一個有趣且令人興奮的過程。我們喜歡為我們的應用程式新增令人興奮和引人注目的功能,並使用 git 將程式碼推送到 GitHub。儘管如此,有時我們往往會忘記軟體開發中最關鍵的方面之一:安全性。

在構建軟體時,我們必須確保軟體是安全的,並且沒有潛在的資料洩露漏洞。

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 金鑰等。Decouple Python 包將自動在 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.