Điểm:0

Cập nhật cookie yêu cầu cho các yêu cầu bao gồm Varnish ESI từ `beresp` ban đầu

lá cờ cn

Tôi có một ứng dụng được cung cấp bởi máy chủ Varnish. Các phần của trang được hiển thị bằng ESI bao gồm.

Vấn đề của tôi là phản hồi ngược dòng bao gồm cookie phiên được mã hóa, trong số những thứ khác có chứa mã thông báo CSRF (hoàn toàn không có bộ nhớ phiên phía máy chủ).

Đối với yêu cầu ban đầu (không có cookie trong yêu cầu), các yêu cầu ESI sẽ không bao gồm cookie được đặt bởi phản hồi đầu tiên từ máy chủ ngược dòng.

Tôi đã thử thiết lập req.http.Cookie bên trong vcl_deliver móc, vì đó là nơi duy nhất trong luồng yêu cầu mà tôi đã tìm thấy nơi cả hai yêu cầuđộ phân giải có thể truy cập R/W. Tuy nhiên, xem xét các yêu cầu bằng varnishlog cho thấy các yêu cầu ESI không bị ảnh hưởng và không bao gồm cookie.

Tôi đã cố gắng hết sức để xem qua tài liệu, nhưng không thể tìm thấy bất kỳ thứ gì hữu ích từ xa.

Có thể đạt được những gì tôi muốn, tức là cập nhật yêu cầu để các yêu cầu ESI bao gồm cookie được trả về bởi phản hồi ngược dòng ban đầu?

Điểm:1
lá cờ in

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

lá cờ cn
CẢM ƠN! Tôi hoàn toàn quên mất `req_top`.
lá cờ cn
Để giải thích một chút, tôi sửa đổi `req` trong `vcl_deliver`, đặt `req.http.X-Updated-Cookie` khi `req.do_esi == true`. Sau đó, trong `vcl_recv`, khi `req.esi_level > 0`, nếu `req_top.http.X-Update-Cookie` được đặt, tôi sao chép nó vào `req.http.Cookie`. Làm việc một điều trị. Rất may vars toàn cầu không cần thiết.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.