2015-04-16 7 views
7

Sto cercando di filtrare le informazioni sensibili usando @sensitive_post_parameters di Django. Ho pensato che anteporre queste annotazioni a una serie di funzioni specifiche sarebbe stato sufficiente, ma non funziona. Ho impostato il punto di interruzione all'interno di SafeExceptionReporterFilter e si interrompe solo quando viene chiamato dallo AdminEmailHandler e dallo non gli altri gestori. Cosa mi manca?È possibile utilizzare SafeReporterFilter di Django con qualcos'altro oltre a AdminEmailHandler?

+0

Hai impostato 'DEBUG = False'? – spg

+0

Sì, ovviamente, ma grazie per averlo indicato. –

risposta

1

Anche se si utilizza lo SafeExceptionReporterFilter, le eccezioni continueranno a contenere dati sensibili (ad esempio le variabili ENV del server e altri dati di runtime).

Per evitare di esporre dati sensibili, non utilizzare questo filtro. Invece, scrivi il tuo middleware di Exception Handler e selettivamente (in modo ricorsivo?) Recupera te stesso i dati che vuoi nei log.

Vedere sys.exc_info su come ottenere il traceback dell'eccezione e come utilizzarlo per le proprie esigenze.

Anche se si utilizza un CustomHandler, si sarà limitati con un gestore specifico e, per quanto ne so, i gestori di terze parti non utilizzeranno lo SafeExceptionReporterFilter.

+0

Infatti, ho provato a creare un gestore personalizzato come mi ha suggerito @aumo, ma era basato sul gestore GELF graypy e non è stato possibile aggiungere il filtro senza riscrivere il tutto. Per quanto riguarda i dati sensibili di runtime, so che il responsabile della sicurezza non mi lascerà loggare. Penso che andrò avanti e scriverò il mio middleware del proprio logger di eccezioni in quanto è l'unico modo in cui posso controllare come vengono divulgate le informazioni. Grazie ! –

2

È possibile scrivere un numero personalizzato Handler che utilizza django.views.debug.ExceptionReporter per formattare l'eccezione.

uso Esempio di 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 utilizzerà il ExceptionReporterFilter definita dall'impostazione DEFAULT_EXCEPTION_REPORTER_FILTER che per default è SafeExceptionReporterFilter.

Dai un'occhiata alla AdminEmailHandler s' implementation per ottenere informazioni su come creare un costume Handler.

Problemi correlati