2015-04-16 6 views
7

Ich versuche, vertrauliche Informationen mit Djangos @sensitive_post_parameters herauszufiltern. Ich dachte, diese Annotationen über die wenigen spezifischen Funktionen voranzustellen wäre genug, aber es funktioniert nicht. Ich habe Breakpoint innerhalb SafeExceptionReporterFilter gesetzt und es bricht nur, wenn von den anderen Handlern AdminEmailHandler und nicht genannt wird. Was vermisse ich ?Ist es möglich, Djangos SafeExceptionReporterFilter mit etwas anderem als dem AdminEmailHandler zu verwenden?

+0

Haben Sie 'DEBUG = False' gesetzt? – spg

+0

Ja, natürlich, aber danke, dass Sie darauf hingewiesen haben. –

Antwort

1

Auch wenn Sie die SafeExceptionReporterFilter verwenden, enthalten Ausnahmen weiterhin vertrauliche Daten (z. B. die ENV-Variablen Ihres Servers und andere Laufzeitdaten).

Um das Aussetzen vertraulicher Daten zu vermeiden, sollten Sie diesen Filter nicht verwenden. Schreiben Sie stattdessen Ihre eigene Exception Handler Middleware und holen Sie sich selektiv (rekursiv?) Die gewünschten Daten in die Protokolle.

Unter sys.exc_info erfahren Sie, wie Sie das Trace-Back einer Exception erhalten und wie Sie es für Ihre Anforderungen verwenden können.

Auch wenn Sie mit einem CustomHandler arbeiten, sind Sie mit einem bestimmten Handler eingeschränkt, und soweit ich weiß, werden Drittanbieter-Handler die SafeExceptionReporterFilter nicht verwenden.

+0

Tatsächlich habe ich versucht, einen benutzerdefinierten Handler zu erstellen, wie @aumo mich vorschlug, aber es basierte auf dem Grayyp GELF-Handler und es war nicht möglich, die Filterung hinzuzufügen, ohne das Ganze neu zu schreiben. Was die sensiblen Laufzeitdaten anbelangt, weiß ich, dass der Sicherheitsmann mich nicht protokollieren lässt. Ich denke, ich werde weitermachen und meine eigene Ausnahme-Logger-Middleware schreiben, denn nur so kann ich kontrollieren, wie die Informationen veröffentlicht werden. Vielen Dank ! –

2

Sie können eine benutzerdefinierte Handler schreiben, die django.views.debug.ExceptionReporter verwendet, um die Ausnahme zu formatieren.

Beispiel Verwendung von 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 die ExceptionReporterFilter durch die Einstellung DEFAULT_EXCEPTION_REPORTER_FILTER definiert verwenden, die standardmäßig SafeExceptionReporterFilter ist.

Werfen Sie einen Blick auf AdminEmailHandler 's implementation, um Informationen zum Erstellen einer benutzerdefinierten Handler zu erhalten.

Verwandte Themen