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

📅  最后修改于: 2022-05-13 01:55:13.015000             🧑  作者: Mango

部署 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']