Нам необходимо провести четкое различие между запросом, содержащим Куки
заголовок и ответ, содержащий Set-Cookie
заголовок.
Предполагая, что токен CSRF был установлен через Set-Cookie
заголовок родительского ответа, вы, вероятно, захотите получить доступ к этому значению через Куки
заголовок запроса в подзапросе ESI.
Предполагая, что заголовок Cookie уже содержит токен CSRF
req_top.http.Cookie
переменная имеет доступ к файлам cookie родительского запроса, однако req_top
недоступно в vcl_backend_response
где анализируются заполнители ESI.
Вы можете обойти это ограничение с помощью следующего фрагмента кода VCL:
суб vcl_recv {
если (req.esi_level > 0) {
установить req.http.X-Parent-Cookie = req_top.http.Cookie;
}
}
Это позволит X-Parent-Cookie
заголовок, который доступен в vcl_backend_response
через bereq.http.X-Parent-Cookie
.
Предполагая, что заголовок Cookie еще не содержит токен CSRF
Реально предположить, что req_top.http.Cookie
еще не содержит значение токена CSRF, поскольку при обработке подзапросов ESI Куки
заголовок еще не установлен клиентом.
Единственное решение, которое я могу придумать, это сохранить родительский Set-Cookie
значение в переменной. Переменные изначально не поддерживаются в Varnish и требуют официального https://github.com/varnish/varnish-модули быть установленным.
Вам придется скомпилировать это из исходников.
Видеть https://github.com/varnish/varnish-modules/blob/master/src/vmod_var.vcc для vmod_var
Примеры API и кода.