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

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

在我们的Django项目中,会有很多敏感信息驻留在settings.py中,或包含敏感信息的本地变量,或使用表单的POST请求中。因此,在部署Django项目时,我们必须确保它们受到保护,尤其是那些公开可用的存储库。当一个项目在没有处理所有可能的测试案例的情况下被部署,并且使用DEBUG=True,那么对于黑客来说,寻找漏洞的工作就是小菜一碟了。因此,用户的数据可能会因为忽略了在settings.py文件中保护敏感信息的重要性而被暴露。有很多情况下,主要在公共资源库中暴露敏感信息可能会出现问题。

处理settings.py文件

为了保护settings.py文件中的敏感信息,我们将使用Python-decouple库。这个库有助于将设置参数从源代码中分离出来。与项目有关的参数进入源代码,与项目实例有关的参数进入环境文件。

安装

要安装这个模块,在终端键入以下命令。

pip install python-decouple

一步一步实现

  • 在manage.py文件附近创建一个.env文件来存储敏感数据,如下图所示。

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

创建.env文件后,它看起来像。

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

  • 现在我们将从settings.py文件中复制敏感信息,如秘钥、调试、数据库用户、数据库名称、数据库密码、数据库主机值,并将其粘贴到创建的.env文件中,如。

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

  • 现在去settings.py文件,添加这一行来导入之前安装的decouple。
from decouple import config
  • 用config替换settings.py文件中的秘钥,在config中输入你在.env文件中保存秘钥的变量。
SECRET_KEY = config('SECRET_KEY')
  • 同样,将debug值替换为:
DEBUG = config('DEBUG')
  • 类似地替换DB_USER,DB_NAME,DB_PASSWORD,DB_HOST。
  • 现在保存所有的文件。
  • 然后在.env文件旁边创建一个.gitignore文件,如下所示。

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

  • 然后在.gitignore文件内输入.env,保存并关闭该文件。
  • 现在你可以把这些文件添加到git上,并安全地推送它们。

处理敏感的变量

敏感变量是指包含密码、用户名等信息的变量。为了保护这些信息不被显示在错误报告中,我们可以使用django.view.decorators.debug模块中的ensitive_variables装饰器。

示例:

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装饰器提供任何参数来隐藏所有的局部变量,以避免它们显示在错误报告中。

示例:

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在django.view.decorators.debug模块中提供了ensitive_post_parameters装饰器来处理这个问题。

示例:

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装饰器提供任何参数来隐藏所有的帖子参数。

示例:

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程