📜  部署 Django 项目时保护敏感信息(1)

📅  最后修改于: 2023-12-03 14:58:09.803000             🧑  作者: Mango

部署 Django 项目时保护敏感信息

在将 Django 项目部署到生产环境时,我们需要保护其中的敏感信息,如数据库密码、API 密钥等。一旦这些信息被泄露,可能会对我们的服务器和用户信息造成重大损失。因此,在部署 Django 项目时保护敏感信息至关重要。

一、使用环境变量

将敏感信息存储在环境变量中,可以避免将其硬编码在代码中,从而保护敏感信息。在 Django 项目中,我们可以使用 dotenv 库来加载环境变量。dotenv 可以从 .env 文件中读取环境变量,然后将其应用到 Django 应用程序中。

首先,安装 python-dotenv

pip install python-dotenv

然后,创建一个 .env 文件,并将敏感信息添加到其中:

SECRET_KEY=your_secret_key
DB_NAME=your_db_name
DB_USER=your_db_user
DB_PASSWORD=your_db_password

最后,在 Django 项目的 settings.py 文件中使用 dotenv 来加载环境变量:

from dotenv import load_dotenv
import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
load_dotenv(os.path.join(BASE_DIR, '.env'))

SECRET_KEY = os.environ.get('SECRET_KEY')
DEBUG = False

ALLOWED_HOSTS = []

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.environ.get('DB_NAME'),
        'USER': os.environ.get('DB_USER'),
        'PASSWORD': os.environ.get('DB_PASSWORD'),
        'HOST': 'localhost',
        'PORT': '',
    }
}
二、使用 third-party 库

有一些第三方库可以帮助我们保护敏感信息。例如,python-decouple 可以从 .env 文件或系统环境变量中加载配置。

首先,安装 python-decouple

pip install python-decouple

然后,在 Django 项目的 settings.py 文件中使用 config 函数来加载配置:

from decouple import config

SECRET_KEY = config('SECRET_KEY')
DEBUG = False

ALLOWED_HOSTS = []

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': config('DB_NAME'),
        'USER': config('DB_USER'),
        'PASSWORD': config('DB_PASSWORD'),
        'HOST': 'localhost',
        'PORT': '',
    }
}
三、使用加密算法

如果我们需要在代码中存储敏感信息,可以使用加密算法对其进行加密。这样即使信息泄露,攻击者也无法直接访问明文信息。常用的加密算法有 AES、RSA、Blowfish 等。我们可以使用 Python 中的 cryptography 来实现加密算法。

首先,安装 cryptography

pip install cryptography

然后,创建一个 encrypt.py 文件,使用 AES 加密算法:

from cryptography.fernet import Fernet
import os

key = Fernet.generate_key()
fernet = Fernet(key)

Database_password = "your_database_password".encode()

encrypted_password = fernet.encrypt(Database_password)

with open('database.key', 'wb') as file_key:
    file_key.write(key)

with open('database.encrypted', 'wb') as file:
    file.write(encrypted_password)

这将生成一个名为 database.key 的文件和一个名为 database.encrypted 的文件。将 .encrypted 文件中的内容存储在 settings.py 文件中,然后使用 .key 文件来进行解密。

from cryptography.fernet import Fernet
import os

with open('database.key', 'rb') as file_key:
    key = file_key.read()

fernet = Fernet(key)

with open('database.encrypted', 'rb') as file:
    encrypted_password = file.read()

DB_PASSWORD = fernet.decrypt(encrypted_password).decode()

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'database_name',
        'USER': 'database_user',
        'PASSWORD': DB_PASSWORD,
        'HOST': 'localhost',
        'PORT': '',
    }
}

以上是 Django 项目中保护敏感信息的几种方法,根据实际情况选择更适合的方式来保护您的信息。