Nginx Adicionar sinalizador seguro aos cookies do servidor proxy

12

A Mozilla acaba de lançar uma nova ferramenta para verificar a configuração do seu site. observatory.mozilla.org

Mas a verificação está reclamando de cookies (-10 pontos): cookie de sessão definido sem o sinalizador Seguro ...

Infelizmente, o serviço executado atrás do meu nginx só pode definir o cabeçalho seguro se o SSL terminar lá diretamente e não quando o SSL terminar no nginx. Portanto, o sinalizador "Seguro" não está definido nos cookies.

É possível anexar o sinalizador "seguro" aos cookies de alguma forma usando o nginx? Modificar a localização / caminho parece ser possível.

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cookie_domain

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cookie_path

ST-DDT
fonte

Respostas:

11

Conheço duas maneiras de fazer isso, nenhuma delas ótima. O primeiro é abusar do proxy_cookie_path assim:

proxy_cookie_path / "/; secure";

O segundo é usar a diretiva more_set_headers do módulo Headers More como este:

more_set_headers 'Set-Cookie: $sent_http_set_cookie; secure';

Ambos podem apresentar problemas porque adicionam os itens às cegas. Por exemplo, se o upstream definir o sinalizador seguro, você acabará enviando ao cliente uma duplicata como esta:

Set-Cookie: foo=bar; secure; secure;

e, no segundo caso, se o aplicativo upstream não definir um cookie, o nginx enviará isso ao navegador:

Set-Cookie; secure;

Isso é duplo, é claro.

Eu acho que esse problema precisa ser corrigido, como muitas pessoas perguntaram sobre ele. Na minha opinião, uma diretiva é necessária, algo como isto:

proxy_cookie_set_flags * HttpOnly;
proxy_cookie_set_flags authentication secure HttpOnly;

mas, infelizmente, isso não existe atualmente :(

Larry
fonte
O caminho do cookie realmente parece uma boa solução alternativa. Eu acho que vou tentar isso primeiro. Obrigado pela ajuda.
ST-DDT
1
Eu levantei uma solicitação de recurso no fórum; espero que o autor esteja interessado nisso.
Franklin Yu
3

Tente usar nginx_cookie_flag_module . Isso resolverá seu problema.

Disclaimer: Eu sou o autor do módulo.

Airis
fonte
3
Você poderia elaborar como o módulo é instalado e configurado. O README parece sugerir que requer a reconstrução do nginx, o que pode não ser aceitável em muitas configurações.
Thomas Nyman
Sim, a utilização deste módulo requer a reconstrução do Nginx. Caso contrário, você não poderia usar sua diretiva. Isso se aplica a todos os módulos de terceiros. Em muitos casos, a reconstrução do nginx não leva muito tempo.
Airis
@ThomasNyman A reconstrução pode ser evitada pagando pelo NGINX Plus, conforme explicado nas instruções do NGINX .
Franklin Yu
1
@ Airis Então você é o autor? Ótimo trabalho, companheiro, mas é melhor adicionar um aviso.
Franklin Yu
@Aris, tentamos usar o módulo com a versão 1.17.1 do ngnix: alpine, mas enfrentamos os seguintes erros quando tentamos carregar os módulos no nginx.conf. 'módulo '/usr/local/nginx/modules/ngx_http_cookie_flag_filter_module.so' não é binário compatível'
Lokesh