前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django小技巧19: 保护敏感信息

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

作者头像
用户1416054
发布2018-12-06 11:22:53
1.6K0
发布2018-12-06 11:22:53
举报
文章被收录于专栏:JackeyGao的博客

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

代码语言:javascript
复制
S3_BUCKET_KEY = 'xxxxxxxxxxxxxxxx'

Python

Don't

代码语言:javascript
复制
S3_BUCKET = 'xxxxxxxxxxxxxxxx'
JENKINS_MIMA = 'xxxxxxxxxxxxxxxx'  # 使用中文命名 jenkins_token

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

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

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

sensitive_variables

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

Python

代码语言:javascript
复制
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

代码语言:javascript
复制
@sensitive_variables()
def my_function():
    ...

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

sensitive_post_parameters

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

Python

代码语言:javascript
复制
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

代码语言:javascript
复制
@sensitive_post_parameters()
def my_view(request):
    ...

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Django小技巧19: 保护敏感信息
    • sensitive_variables
      • sensitive_post_parameters
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档