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.