Nginx 从代理服务器向 Cookie 添加安全标志

Nginx 从代理服务器向 Cookie 添加安全标志

Mozilla 刚刚发布了一个新工具来检查您的网站配置。观察站.mozilla.org

但扫描抱怨 Cookie(-10 分):会话 cookie 设置没有安全标志...

不幸的是,在我的 nginx 后面运行的服务只能在 SSL 直接终止时设置安全标头,而不是当 SSL 在 nginx 上终止时设置安全标头。因此,cookie 上未设置“安全”标志。

是否可以使用 nginx 以某种方式将“安全”标志附加到 cookie?修改位置/路径似乎是可能的。

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

答案1

我知道有两种方法可以做到这一点,但都不是很好。第一种是像这样滥用 proxy_cookie_path :

proxy_cookie_path / "/; secure";

第二种是使用 more_set_headers 指令标题更多 像这样的模块:

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

这两种方法都会带来问题,因为它们盲目地添加项目。例如,如果上游设置安全的标记您最终将向客户端发送如下副本:

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

在第二种情况下,如果上游应用程序没有设置 cookie,nginx 会将其发送到浏览器:

Set-Cookie; secure;

当然,这是双倍不利的。

我认为这个问题需要解决,因为很多人都问过这个问题。在我看来,需要这样的指令:

proxy_cookie_set_flags * HttpOnly;
proxy_cookie_set_flags authentication secure HttpOnly;

但可惜的是,目前还不存在:(

答案2

尝试使用nginx_cookie_flag_module。它会解决你的问题。

免责声明:我是该模块的作者。

相关内容