2015-04-16 45 views
7

我試圖用Django的@sensitive_post_parameters來過濾敏感信息。我認爲把這些註釋放在少數特定的功能上就足夠了,但它不起作用。我在SafeExceptionReporterFilter裏面設置了斷點,它只在被其他處理程序從AdminEmailHandler而不是被調用時纔會中斷。我錯過了什麼?是否有可能使用Django的SafeExceptionReporterFilter而不是AdminEmailHandler?

+0

您是否設置了'DEBUG = False'? – spg

+0

很明顯,但謝謝你指出。 –

回答

1

即使您使用SafeExceptionReporterFilter,異常仍會包含敏感數據(例如您的服務器的ENV變量和其他運行時數據)。

爲避免暴露敏感數據,您不應該使用此過濾器。相反,編寫自己的異常處理程序中間件並有選擇地(遞歸地?)自己獲取日誌中需要的數據。

請參閱sys.exc_info瞭解如何獲取異常的回溯以及如何根據需要使用它。

即使您使用CustomHandler,您也會受到特定處理程序的限制,並且據我所知,第三方處理程序不會使用SafeExceptionReporterFilter

+0

事實上,我的確嘗試創建一個自定義處理程序,就像@aumo建議的那樣,但它基於graypy GELF處理程序,並且無法在不重寫整個事物的情況下添加篩選。至於敏感的運行時數據,我知道安全人員不會讓我登錄它們。我想我會繼續寫下我自己的異常記錄器中間件,因爲這是我可以控制信息披露的唯一方式。謝謝 ! –

2

您可以編寫自定義Handler,使用django.views.debug.ExceptionReporter來格式化異常。

實施例使用的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將使用由DEFAULT_EXCEPTION_REPORTER_FILTER設置在缺省情況下是SafeExceptionReporterFilter定義的ExceptionReporterFilter

查看AdminEmailHandlerimplementation以獲取有關如何創建自定義Handler的信息。

相關問題