Trebuie să facem o distincție clară între o cerere care conține a Cookie antet și un răspuns care conține a Set-Cookie antet.
Presupunând că un jeton CSRF a fost setat printr-un Set-Cookie antetul răspunsului părintelui, probabil că doriți să accesați acea valoare prin a Cookie antetul cererii din subcererea dvs. ESI.
Presupunând că antetul Cookie conține deja jetonul CSRF
The req_top.http.Cookie variabila are totuși acces la cookie-urile cererii părinte req_top nu este accesibil în vcl_backend_response unde sunt analizați substituenții ESI.
Puteți ocoli această limitare cu următorul fragment VCL:
sub vcl_recv {
if (req.esi_level > 0 ) {
set req.http.X-Parent-Cookie = req_top.http.Cookie;
}
}
Acest lucru va permite X-Parent-Cookie antet care este disponibil în vcl_backend_response prin bereq.http.X-Parent-Cookie.
Presupunând că antetul Cookie nu conține încă jetonul CSRF
Este realist să presupunem că req_top.http.Cookie nu conține încă valoarea jetonului CSRF, deoarece atunci când sunt procesate subcereri ESI, Cookie antetul nu este încă setat de client.
Singura soluție pe care o pot gândi este stocarea părintelui Set-Cookie valoare într-o variabilă. Variabilele nu sunt acceptate nativ în Varnish și necesită oficial https://github.com/varnish/varnish-modules a fi instalat.
Va trebui să compilați acest lucru din sursă.
Vedea https://github.com/varnish/varnish-modules/blob/master/src/vmod_var.vcc pentru vmod_var API și exemple de cod.