Chúng ta cần phân biệt rõ ràng giữa một yêu cầu có chứa một Bánh quy tiêu đề và một phản hồi có chứa một đặt cookie tiêu đề.
Giả sử mã thông báo CSRF được đặt thông qua một đặt cookie tiêu đề của phản hồi gốc, bạn có thể muốn truy cập giá trị đó thông qua một Bánh quy tiêu đề yêu cầu trong yêu cầu phụ ESI của bạn.
Giả sử tiêu đề Cookie đã chứa mã thông báo CSRF
Các req_top.http.Cookie Tuy nhiên, biến có quyền truy cập vào cookie của yêu cầu gốc req_top không thể truy cập trong vcl_backend_response nơi trình giữ chỗ ESI được phân tích cú pháp.
Bạn có thể bỏ qua giới hạn này bằng đoạn mã VCL sau:
phụ vcl_recv {
nếu (req.esi_level > 0 ) {
đặt req.http.X-Parent-Cookie = req_top.http.Cookie;
}
}
Điều này sẽ cho phép các X-Parent-Cookie tiêu đề có sẵn trong vcl_backend_response xuyên qua bereq.http.X-Parent-Cookie.
Giả sử tiêu đề Cookie chưa chứa mã thông báo CSRF
Đó là thực tế để giả định rằng req_top.http.Cookie chưa chứa giá trị của mã thông báo CSRF vì khi các yêu cầu con ESI được xử lý, Bánh quy tiêu đề chưa được đặt bởi khách hàng.
Giải pháp duy nhất tôi có thể nghĩ ra là lưu trữ cha mẹ đặt cookie giá trị trong một biến. Các biến không được hỗ trợ nguyên bản trong Varnish và yêu cầu phiên bản chính thức https://github.com/varnish/varnish-modules được cài đặt.
Bạn sẽ phải biên dịch cái này từ nguồn.
Nhìn thấy https://github.com/varnish/varnish-modules/blob/master/src/vmod_var.vcc cho vmod_var Ví dụ về API và mã.