2015-04-16 13 views
7

Tôi đang cố lọc ra các thông tin nhạy cảm bằng cách sử dụng số @sensitive_post_parameters của Django. Tôi nghĩ rằng việc thêm các chú thích này vào một số fonctions cụ thể sẽ là đủ, nhưng nó không hoạt động. Tôi đã đặt điểm ngắt bên trong SafeExceptionReporterFilter và chỉ ngắt khi được gọi từ các trình xử lý khác AdminEmailHandlerkhông phải là. Tôi đang thiếu gì?Có thể sử dụng tính năng SafeExceptionReporterFilter của Django bằng một cái gì đó khác với AdminEmailHandler không?

+0

Bạn đã đặt 'DEBUG = False' chưa? – spg

+0

Có, nhưng cảm ơn bạn đã chỉ ra. –

Trả lời

1

Ngay cả khi bạn sử dụng SafeExceptionReporterFilter, ngoại lệ sẽ vẫn chứa dữ liệu nhạy cảm (ví dụ: biến ENV của Máy chủ và dữ liệu thời gian chạy khác).

Để tránh hiển thị dữ liệu nhạy cảm, bạn không nên sử dụng bộ lọc này. Thay vào đó, hãy viết phần mềm Middleware Handler Middleware của riêng bạn và chọn lọc (đệ quy?) Tìm nạp dữ liệu bạn muốn trong nhật ký.

Xem sys.exc_info để biết cách truy xuất dấu vết của ngoại lệ và cách sử dụng theo dõi nhu cầu của bạn.

Thậm chí nếu bạn đi với CustomHandler bạn sẽ bị giới hạn với một trình xử lý cụ thể và theo như tôi biết, các bên xử lý bên thứ ba sẽ không sử dụng SafeExceptionReporterFilter.

+0

Thật vậy, tôi đã cố gắng tạo một trình xử lý tùy chỉnh như @aumo đã gợi ý cho tôi, nhưng nó dựa trên bộ xử lý GELF màu xám và không thể thêm bộ lọc mà không viết lại toàn bộ. Đối với dữ liệu thời gian chạy nhạy cảm, tôi biết anh chàng bảo mật sẽ không cho phép tôi đăng nhập chúng. Tôi nghĩ rằng tôi sẽ đi trước và viết middleware logger ngoại lệ của riêng tôi vì đó là cách duy nhất tôi có thể kiểm soát cách thông tin được tiết lộ. Cảm ơn bạn ! –

2

Bạn có thể viết Handler tùy chỉnh sử dụng django.views.debug.ExceptionReporter để định dạng ngoại lệ.

Ví dụ sử dụng 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 sẽ sử dụng ExceptionReporterFilter xác định bởi các thiết lập DEFAULT_EXCEPTION_REPORTER_FILTER mà theo mặc định là SafeExceptionReporterFilter.

Hãy xem AdminEmailHandler 's implementation để biết thông tin về cách tạo tùy chỉnh Handler.

Các vấn đề liên quan