如何避免POST中的敏感信息出现在日志和调试电子邮件中?

时间:2011-10-10 15:19:01

标签: django security

我的一个网站上有一张表格供客户提交信用卡信息。

在正常操作下,由于连接的SSL以及在充电尝试后数据可能无法保存在后端的事实,敏感信息(信用卡号,到期日期等)相当安全。

只要处理请求的后端代码引发异常,问题就会开始,因为异常详细信息(Django包含POST QueryDict)包含纯文本的敏感信息。这些反过来又找到了错误日志和发送给管理员的电子邮件。

有一些优雅的方法可以避免这种情况吗?

2 个答案:

答案 0 :(得分:3)

您应该阅读以下文档:https://docs.djangoproject.com/en/dev/howto/error-reporting/#filtering-sensitive-information

自Django 1.2.6以来,支持过滤掉敏感信息,分别为1.3.1和'django.contrib.auth.views'中的敏感数据,自Django 1.4以来,默认过滤掉。

答案 1 :(得分:-1)

我不知道我的头脑中的一个,但是编写一些用unicode替换值的中间件是相当直接的 - 就像不能{{{ 1}}倒是。例如:

repr

(实际上,它可能不是那么简单,因为我认为class sensitive_unicode(unicode): def __repr__(self): return "<sensitive_unicode>" class SensitiveDataHidingMiddleware(object): def process_request(self, request): for key, val in request.POST.iteritems(): if key.startswith("sensitive_"): request.POST[key] = sensitive_unicode(val) 是不可变的......所以你必须强制它是可变的或复制它或者什么,但这是一般的想法。