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ã.