2012-03-30 21 views
6

Tôi đang viết ra sự hiểu biết của mình về cơ chế csrf protcetion trong django.Xin vui lòng sửa lỗi nếu bị lỗi.hiểu csrf trong lĩnh vực ẩn django dưới dạng và CSRFCookie

csrfViewMiddleware tạo một chuỗi duy nhất và lưu trữ trong trường ẩn 'csrfmiddlewaretoken' của biểu mẫu có nguồn gốc từ máy chủ.

Khi ai đó cố gắng đăng biểu mẫu, trang web sẽ kiểm tra trường 'csrfmiddlewaretoken' và giá trị của trường.Nếu nó sai hoặc không được đặt, khi đó, tìm thấy một nỗ lực csrf.

Nhưng sau đó, chính xác thì CSRFCookie là gì? The doc nói rằng giá trị duy nhất được thiết lập trong CSRFCookie và cũng trong hidden field. Đây là nơi tôi đang bối rối. Một cookie được gửi đến trình duyệt với chuỗi duy nhất được nhúng? Tôi muốn ai đó có thể giải thích điều này một chút rõ ràng.

cảm ơn bạn,

Trả lời

5

Ok, vì vậy ở đây đi giải thích của tôi:

Django gán một người dùng xác thực một CSRF token được lưu trữ trong một cookie. Giá trị trong cookie này được đọc mỗi khi người dùng thực hiện yêu cầu được coi là "không an toàn" (cụ thể là POST, PUT, DELETE) để xác thực rằng người dùng, không phải là bên thứ ba độc hại đang đưa ra yêu cầu.

Thẻ CSRF bạn đặt trong biểu mẫu thực sự lấy mã thông báo CSRF từ cookie và sau đó chuyển nó dưới dạng biến POST khi bạn gửi biểu mẫu.

Hy vọng điều đó làm cho nó rõ ràng hơn một chút.

+0

Vì vậy, chỉ một trình duyệt của người dùng được xác thực mới nhận được mã thông báo này chứ không phải tất cả những người truy cập trang web.Điều đó có đúng không? – damon

+0

Không chắc chắn cách Django xử lý chính xác - nó có thể bảo vệ tất cả người dùng bất kể trạng thái xác thực. Về cơ bản, bất kỳ hành động nào có khả năng thay đổi một số khía cạnh của ứng dụng của bạn đều phải có bảo vệ CSRF. – Todd

1

Với sự hiểu biết hiện tại của tôi, tôi không hoàn toàn hài lòng với câu trả lời đã được xác thực.

Bạn có thể tìm thấy phiên bản here của mình.

Để tóm tắt, CSRFCookie là "an toàn", theo nghĩa là kẻ tấn công không thể truy cập nó vì chính sách cùng nguồn gốc. Trình duyệt sẽ tự động gửi giá trị này. Bây giờ, biểu mẫu của bạn cũng phải gửi giá trị này (ví dụ: trong trường ẩn). Điều này có nghĩa là biểu mẫu của bạn phải biết giá trị này và có thể lấy nó từ cookie.

Kẻ tấn công không thể lấy mã thông báo từ cookie và do đó không thể giả mạo mã độc hại chứa mã thông báo.

Điều quan trọng, cuối cùng, là người dùng có thể gửi mã thông báo csrf và máy chủ có thể xác minh nó. Sử dụng cookie là một cách thuận tiện để thực hiện việc này, nhưng điều này có thể được thực hiện khác nhau (ví dụ: máy chủ có thể lưu mã thông báo CSRF cho mỗi phiên).

Tôi không phải là chuyên gia, nhưng đây là cách tôi hiểu nó. Hy vọng nó giúp.

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