我尝试使用Django' @sensitive_post_parameters
过滤掉敏感信息。我认为将这些注释添加到几个特定的功能上就足够了,但它不起作用。我在SafeExceptionReporterFilter
内设置了断点,只有在从AdminEmailHandler
和而不是其他处理程序调用时才会中断。我错过了什么?
答案 0 :(得分:2)
您可以编写使用django.views.debug.ExceptionReporter
格式化异常的自定义Handler。
使用ExceptionReporter
:
from django.views.debug import ExceptionReporter
# exc_type, exc_value, traceback are a standard exception
# tuple as returned by sys.exc_info
reporter = ExceptionReporter(request, exc_type, exc_value, traceback)
html_report = reporter.get_traceback_html()
text_report = reporter.get_traceback_text()
ExceptionReporter
将使用ExceptionReporterFilter
设置定义的DEFAULT_EXCEPTION_REPORTER_FILTER
,默认情况下为SafeExceptionReporterFilter
。
查看AdminEmailHandler
的{{3}}以获取有关如何创建自定义Handler
的信息。
答案 1 :(得分:1)
即使使用SafeExceptionReporterFilter
,异常仍将包含敏感数据(例如服务器的ENV变量和其他运行时数据)。
为避免暴露敏感数据,您不应使用此过滤器。相反,编写自己的异常处理程序中间件并有选择地(递归地?)从日志中获取所需的数据。
请参阅sys.exc_info
,了解如何获取异常的追溯以及如何根据您的需要使用它。
即使您使用CustomHandler,您也会受到特定处理程序的限制,据我所知,第三方处理程序将不会使用SafeExceptionReporterFilter
。