FixVibe
Covered by FixVibehigh

Bảo vệ CSRF: Bảo vệ chống lại những thay đổi trạng thái trái phép

Giả mạo yêu cầu chéo trang web (CSRF) vẫn là mối đe dọa đáng kể đối với các ứng dụng web. Nghiên cứu này khám phá cách các khung hiện đại như Django triển khai tính năng bảo vệ và cách các thuộc tính cấp trình duyệt như SameSite cung cấp khả năng bảo vệ chuyên sâu trước các yêu cầu trái phép.

CWE-352

Tác động

Giả mạo yêu cầu chéo trang (CSRF) cho phép kẻ tấn công lừa trình duyệt của nạn nhân thực hiện các hành động không mong muốn trên một trang web khác mà nạn nhân hiện đã được xác thực. Vì trình duyệt tự động đưa thông tin xác thực xung quanh như cookie vào yêu cầu nên kẻ tấn công có thể giả mạo các hoạt động thay đổi trạng thái—chẳng hạn như thay đổi mật khẩu, xóa dữ liệu hoặc bắt đầu giao dịch—mà người dùng không hề biết.

Nguyên nhân gốc rễ

Nguyên nhân cơ bản của CSRF là hành vi mặc định của trình duyệt web là gửi cookie được liên kết với một miền bất cứ khi nào có yêu cầu được thực hiện đối với miền đó, bất kể nguồn gốc của yêu cầu là [S1]. Nếu không xác thực cụ thể rằng yêu cầu được kích hoạt có chủ ý từ giao diện người dùng của chính ứng dụng, máy chủ không thể phân biệt giữa hành động hợp pháp của người dùng và hành động giả mạo.

Cơ chế bảo vệ CSRF của Django

Django cung cấp một hệ thống phòng thủ tích hợp để giảm thiểu những rủi ro này thông qua phần mềm trung gian và tích hợp mẫu [S2].

Kích hoạt phần mềm trung gian

django.middleware.csrf.CsrfViewMiddleware chịu trách nhiệm bảo vệ CSRF và thường được bật theo mặc định [S2]. Nó phải được định vị trước bất kỳ phần mềm trung gian xem nào cho rằng các cuộc tấn công CSRF đã được xử lý [S2].

Triển khai mẫu

Đối với mọi biểu mẫu POST nội bộ, nhà phát triển phải bao gồm thẻ {% csrf_token %} bên trong phần tử <form> [S2]. Điều này đảm bảo rằng một mã thông báo bí mật, duy nhất được bao gồm trong yêu cầu, sau đó máy chủ sẽ xác thực dựa trên phiên của người dùng.

Rủi ro rò rỉ token

Một chi tiết triển khai quan trọng là không bao giờ được đưa {% csrf_token %} vào các biểu mẫu nhắm mục tiêu các URL bên ngoài [S2]. Làm như vậy sẽ rò rỉ mã thông báo CSRF bí mật cho bên thứ ba, có khả năng ảnh hưởng đến bảo mật phiên [S2] của người dùng.

Các trình duyệt hiện đại đã giới thiệu thuộc tính SameSite cho tiêu đề Set-Cookie để cung cấp một lớp [S1] chuyên sâu về phòng thủ.

  • Nghiêm ngặt: Cookie chỉ được gửi trong ngữ cảnh của bên thứ nhất, nghĩa là trang web trong thanh URL khớp với miền [S1] của cookie.
  • Lax: Cookie không được gửi theo yêu cầu phụ trên nhiều trang web (chẳng hạn như hình ảnh hoặc khung) nhưng được gửi khi người dùng điều hướng đến trang gốc, chẳng hạn như bằng cách nhấp vào liên kết tiêu chuẩn [S1].

FixVibe kiểm tra nó như thế nào

FixVibe hiện bao gồm tính năng bảo vệ CSRF dưới dạng kiểm tra hoạt động có kiểm soát. Sau khi xác minh miền, active.csrf-protection kiểm tra các biểu mẫu thay đổi trạng thái được phát hiện, kiểm tra đầu vào có hình mã thông báo CSRF và tín hiệu cookie SameSite, sau đó thử gửi nguồn gốc giả mạo có tác động thấp và chỉ báo cáo khi máy chủ chấp nhận. Kiểm tra cookie cũng gắn cờ các thuộc tính SameSite yếu làm giảm khả năng phòng thủ chuyên sâu của CSRF.