过滤敏感信息¶
错误报告对于调试错误确实很有帮助,因此通常记录尽可能多的有关这些错误的相关信息非常有用。例如,默认情况下,Django会记录引发的异常的完整追溯,每个追溯框架的局部变量以及 HttpRequest
的属性。
但是,有时某些类型的信息可能过于敏感,因此可能不适用于跟踪例如用户的密码或信用卡号。因此,除了过滤掉DEBUG
文档中描述的敏感设置外,Django还提供了一组函数装饰器,以帮助您控制应从生产环境中的错误报告中过滤掉哪些信息(即在何处 DEBUG
设置为False
):sensitive_variables()
和 sensitive_post_parameters()
。
sensitive_variables
(*变量)¶-
如果代码中的函数(视图或任何常规回调)使用易于包含敏感信息的局部变量,则可以使用
sensitive_variables
装饰器防止这些变量的值包含在错误报告中: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 ...
在上述例子中,对于该值
user
,pw
和cc
变量将被隐藏,并用星(替换**********
)错误的报告,而值name
变量将被公开。要从错误日志中系统地隐藏函数的所有局部变量,请不要向
sensitive_variables
装饰器提供任何参数:@sensitive_variables() def my_function(): ...
使用多个装饰器时
如果要隐藏的变量也是函数参数(例如
user
,在下面的示例中为“ ”),并且如果修饰的函数具有多个修饰符,则请确保将其放在@sensitive_variables
修饰符链的顶部。这样,当它通过其他装饰器传递时,它还将隐藏函数参数:@sensitive_variables('user', 'pw', 'cc') @some_decorator @another_decorator def process_info(user): ...
sensitive_post_parameters
(* parameters)¶-
如果您的一个视图接收到一个
HttpRequest
对象,该对象很容易包含敏感信息,则可以使用装饰器阻止这些参数的值包含在错误报告中 :POST parameters
sensitive_post_parameters
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'], ) ...
在上面的示例中,错误报告内的请求表示中,
pass_word
和credit_card_number
参数的值将被隐藏并用星号(**********
)替换,而该name
参数的值将被公开。要在错误报告中系统地隐藏请求的所有POST参数,请不要向
sensitive_post_parameters
装饰器提供任何参数:@sensitive_post_parameters() def my_view(request): ...
所有POST参数被系统过滤的某些错误报告出来
django.contrib.auth.views
次(login
,password_reset_confirm
,password_change
,和add_view
和user_change_password
在auth
管理员),以防止敏感信息泄漏的诸如用户密码。