部署 Django 项目时保护敏感信息
我们的Django项目中会有很多敏感信息驻留在settings.py中,或者包含敏感信息的局部变量或者使用表单发出的POST请求。因此,在部署 Django 项目时,我们始终必须确保它们受到保护,尤其是公开可用的存储库。当一个项目在没有处理所有可能的测试用例并且 DEBUG=True 的情况下部署时,它使查找漏洞的工作成为黑客的小菜一碟。因此,用户的数据可能会因忽略在 settings.py 文件中保护敏感信息的重要性而暴露。在很多情况下,主要在公共存储库中暴露敏感信息可能会出现问题。
处理 settings.py 文件
为了保护 settings.py 文件中的敏感信息,我们将使用Python 解耦库。该库有助于将设置参数与源代码分开。与项目相关的参数在源代码中,与项目实例相关的参数在环境文件中。
安装
要安装此模块,请在终端中键入以下命令。
pip install python-decouple
分步实施
- 创建一个.env文件以将敏感数据存储在 mange.py 文件附近,如下所示。
创建 .env 文件后,它看起来像:
- 我们现在将从 settings.py 文件中复制敏感信息,例如密钥、调试、数据库用户、数据库名称、数据库密码、数据库主机值,并将其粘贴到创建为的 .env 文件中:
- 现在转到 settings.py 文件并添加这一行以导入之前安装的 decouple。
Python3
from decouple import config
Python3
SECRET_KEY = config('SECRET_KEY')
Python3
DEBUG = config('DEBUG')
Python3
from django.views.decorators.debug import sensitive_variables
@sensitive_variables('password', 'acc', 'name')
def fun():
password = user.password
acc = user.account_no
name = user.name
Python3
from django.views.decorators.debug import sensitive_variables
@sensitive_variables()
def fun():
password = user.password
acc = user.account_no
name = user.name
Python3
from django.views.decorators.debug import sensitive_post_parameters
@sensitive_post_parameters('name', 'password', 'acc')
def fun(request):
name = request.POST['name']
password = request.POST['password']
acc = request.POST['account_no']
Python3
from django.views.decorators.debug import sensitive_post_parameters
@sensitive_post_parameters()
def fun(request):
name = request.POST['name']
password = request.POST['password']
acc = request.POST['account_no']
- 将 settings.py 文件中的密钥替换为config 并在 config 中输入用于在 .env 文件中保存密钥的变量:
蟒蛇3
SECRET_KEY = config('SECRET_KEY')
- 同样将调试值替换为:
蟒蛇3
DEBUG = config('DEBUG')
- 同样替换 DB_USER,DB_NAME,DB_PASSWORD,DB_HOST。
- 现在保存所有文件。
- 然后在 .env 文件旁边创建一个.gitignore文件,如下所示。
- 然后在 .gitignore 文件中输入 .env ,保存并关闭文件。
- 现在您可以将这些文件添加到 git 并安全地推送它们。
处理敏感变量
敏感变量是指包含密码、用户名等信息的变量。为了防止这些信息显示在错误报告中,我们可以使用 django.views.decorators.debug 模块中的sensitive_variables 装饰器。
例子:
蟒蛇3
from django.views.decorators.debug import sensitive_variables
@sensitive_variables('password', 'acc', 'name')
def fun():
password = user.password
acc = user.account_no
name = user.name
我们还可以隐藏所有局部变量以避免它们显示在错误报告中,方法是不向sensitive_variables 装饰器提供任何参数。
例子:
蟒蛇3
from django.views.decorators.debug import sensitive_variables
@sensitive_variables()
def fun():
password = user.password
acc = user.account_no
name = user.name
处理 POST 参数
假设其中一个 POST 请求包含敏感信息,如密码、帐号、信用卡号等。我们还希望避免在错误报告中显示此信息。 Django 提供了sensitive_post_parameters 装饰器来处理来自 django.views.decorators.debug 模块的这个问题。
例子:
蟒蛇3
from django.views.decorators.debug import sensitive_post_parameters
@sensitive_post_parameters('name', 'password', 'acc')
def fun(request):
name = request.POST['name']
password = request.POST['password']
acc = request.POST['account_no']
我们还可以通过不向sensitive_post_parameters 装饰器提供任何参数来隐藏所有post 参数。
例子:
蟒蛇3
from django.views.decorators.debug import sensitive_post_parameters
@sensitive_post_parameters()
def fun(request):
name = request.POST['name']
password = request.POST['password']
acc = request.POST['account_no']