Django小技巧19: 保护敏感信息

Django小技巧19: 保护敏感信息

Posted November 05, 2018

翻译整理自: simpleisbetterthancomplex.com

互联网是一片荒地, 在互联网上部署 Web 服务的时候, 安全是首要考虑的。Django 在提供可靠和安全的API方面做的非常出色.但是前提是你要正确的使用它们。

永远不应该在部署 WEB 服务的时候开启 DEBUG=True

DEBUG = True 一个很大的功能是发生异常的时候从你的环境中转储大量元数据, 并且暴露在页面中。包括整个 settings.py 的配置.

即使你永远不会使用DEBUG = True, 在 settings.py 中命名配置时也需要格外的小心, 确保你的所有敏感配置的字段都包含下面关键字之一:

  • API
  • KEY
  • PASS
  • SECRET
  • SIGNATURE
  • TOKEN

这样 Django 就不好转储哪些包含敏感信息的配置变量.

Python

Do

S3_BUCKET_KEY = 'xxxxxxxxxxxxxxxx'

Python

Don't

S3_BUCKET = 'xxxxxxxxxxxxxxxx'
JENKINS_MIMA = 'xxxxxxxxxxxxxxxx'  # 使用中文命名 jenkins_token

即便你关闭的 DEBUG, 如果 Django 配置了电子邮件发送错误报告,也会有可能在公网环境中泄露错误报告从而泄露 settings 配置, 特别是没有加密的电子邮件传输协议。

特别注意的一点: 永远不要把敏感信息提交到公共代码仓库!换句话说,就说不要把敏感信息添加到 settings.py 中, 最好的方式是使用环境变量或者python-decouple. 后续会写一篇将配置上下线分离的文章

说到过滤错误报告,你应该使用两个过滤器:

sensitive_variables

可以定义一组局部敏感变量, 这些变量不好显示在错误报告中,从而达到保护它们的作用。

Python

from django.views.decorators.debug import sensitive_variables

@sensitive_variables('user', 'pw', 'cc')
def process_info(user):
    pw = user.pass_word
    cc = user.credit_card_number
    name = user.name
    ...

或者 ,如果想保护函数里的所有变量

Python

@sensitive_variables()
def my_function():
    ...

PS: 使用多个装饰器的时候, 确保@sensitive_variables()装饰器在第一个位置.

sensitive_post_parameters

与前面的例子类似, 但这个处理 post 参数.

Python

from django.views.decorators.debug import sensitive_post_parameters

@sensitive_post_parameters('pass_word', 'credit_card_number')
def record_user_profile(request):
    UserProfile.create(
        user=request.user,
        password=request.POST['pass_word'],
        credit_card=request.POST['credit_card_number'],
        name=request.POST['name'],
    )
    ...

隐藏 post 所有参数

Python

@sensitive_post_parameters()
def my_view(request):
    ...

阅读更多关于过滤敏感信息的文档. Django Documentation

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程坑太多

『高级篇』docker之kubernetes基础集群附在功能kube-proxy和kube-dns(36)

每台工作节点上都应该运行一个kube-proxy服务,它监听API server中service和endpoint的变化情况,并通过iptables等来为服务配...

1232
来自专栏飞雪无情的博客

使用Nginx搭建PHP服务器

一般我们都是采用Apache 作为PHP的解析服务器,这次则是采用Nginx这个强大的反向代理服务器来搭建PHP服务器。下面就以Linux发行版Ubuntu为例...

2673
来自专栏运维小白

Linux基础(day57)

14.4 exportfs命令 exportfs命令 常用选项 -a 全部挂载或者全部卸载 -r 重新挂载 -u 卸载某一个目录 -v 显示共享目录 以下操作在...

2477
来自专栏iOS逆向

WEB平台DJANGO&VUE配置部署生产环境

nginx可以新建一个配置,放在项目目录,暂时不修改nginx的默认配置,端口号可以换一个,然后在/etc/nginx/conf.d/内新建一个软链接指向该配置...

64712
来自专栏python3

gitlab 注册runner

向GitLab-CI注册一个Runner需要两样东西:GitLab-CI的url和注册token。 其中,token是为了确定你这个Runner是所有工程都能够...

1331
来自专栏哎_小羊

记录Gerrit2.8.4环境迁移、安装、配置以及问题解决

前段时间,由于公司内部调整,需要将原gerrit系统中部分业务拆分迁移到新gerrit系统中,这里我就将整个环境迁移、环境搭建、环境配置、版本选择等做一下记录,...

4829
来自专栏WindCoder

tomcat基础小结

bin:可执行文件,包含启动脚本 conf:配置文件 lib:tomcat的依赖库 logs:日志 temp:临时文件 webapp:默认的应用部署目...

881
来自专栏云计算

从零开始写一个运行在Kubernetes上的服务程序

这是一篇对于Go语言和Kubernetes新手来说再适合不过的文章了。文中详细介绍了从代码编写到用容器的方式在Kubernetes集群中发布,一步一步,一行一行...

21911
来自专栏张戈的专栏

Linux系统防CC攻击自动拉黑IP增强版Shell脚本

最新更新:张戈博客已推出功能更强大的轻量级 CC 攻击防御脚本工具 CCKiller==>传送门 前天没事写了一个防 CC 攻击的 Shell 脚本,没想到这么...

6765
来自专栏calvin

通过 pxe(网络安装)完成centos 系统的网络安装

首先交代环境。本地2台主机,一台windows主机,一台等待安装centos的主机。2台主机在同一个局域网。通过路由器自动获取ip上网。 网上大多数pxe安装...

2451

扫码关注云+社区

领取腾讯云代金券