我的一个网站上有一张表格供客户提交信用卡信息。
在正常操作下,由于连接的SSL以及在充电尝试后数据可能无法保存在后端的事实,敏感信息(信用卡号,到期日期等)相当安全。
只要处理请求的后端代码引发异常,问题就会开始,因为异常详细信息(Django包含POST QueryDict)包含纯文本的敏感信息。这些反过来又找到了错误日志和发送给管理员的电子邮件。
有一些优雅的方法可以避免这种情况吗?
答案 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)
是不可变的......所以你必须强制它是可变的或复制它或者什么,但这是一般的想法。