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?
risposta
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
.
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 ! –
È 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
.
Hai impostato 'DEBUG = False'? – spg
Sì, ovviamente, ma grazie per averlo indicato. –