เราจำเป็นต้องแยกให้ชัดเจนระหว่างคำขอที่มี คุกกี้
ส่วนหัวและการตอบกลับที่มี ชุดคุกกี้
หัวข้อ.
สมมติว่าโทเค็น CSRF ถูกตั้งค่าผ่าน ชุดคุกกี้
ส่วนหัวของการตอบกลับพาเรนต์ คุณอาจต้องการเข้าถึงค่านั้นผ่าน คุกกี้
ส่วนหัวของคำขอในคำขอย่อย ESI ของคุณ
สมมติว่าส่วนหัวของคุกกี้มีโทเค็น CSRF อยู่แล้ว
เดอะ req_top.http.คุกกี้
อย่างไรก็ตามตัวแปรสามารถเข้าถึงคุกกี้ของคำขอหลักได้ req_top
ไม่สามารถเข้าถึงได้ใน vcl_backend_response
โดยที่ตัวยึดตำแหน่ง ESI จะถูกแยกวิเคราะห์
คุณสามารถข้ามข้อจำกัดนี้ได้ด้วยข้อมูลโค้ด VCL ต่อไปนี้:
ย่อย vcl_recv {
ถ้า (req.esi_level > 0 ) {
ตั้ง req.http.X-Parent-Cookie = req_top.http.Cookie;
}
}
สิ่งนี้จะเปิดใช้งาน X-Parent-คุกกี้
ส่วนหัวที่มีอยู่ใน vcl_backend_response
ผ่าน bereq.http.X-Parent-Cookie
.
สมมติว่าส่วนหัวของคุกกี้ยังไม่มีโทเค็น CSRF
มันเป็นเรื่องจริงที่จะสันนิษฐานว่า req_top.http.คุกกี้
ยังไม่มีค่าของโทเค็น CSRF เนื่องจากเมื่อคำขอย่อย ESI ได้รับการประมวลผล คุกกี้
ลูกค้ายังไม่ได้กำหนดส่วนหัว
ทางออกเดียวที่ฉันคิดออกคือการจัดเก็บพาเรนต์ ชุดคุกกี้
ค่าในตัวแปร ตัวแปรไม่ได้รับการสนับสนุนโดยกำเนิดในวานิชและต้องใช้อย่างเป็นทางการ https://github.com/varnish/varnish-modules ที่จะติดตั้ง
คุณจะต้องรวบรวมสิ่งนี้จากแหล่งที่มา
ดู https://github.com/varnish/varnish-modules/blob/master/src/vmod_var.vcc สำหรับ vmod_var
ตัวอย่าง API และโค้ด