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


12

Mozilla刚刚发布了一个新工具,用于检查您的网站配置。observatory.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

Answers:


11

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

proxy_cookie_path / "/; secure";

第二个方法是使用Headers More 模块中的more_set_headers指令,如下所示:

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

由于它们会盲目添加项目,因此两者都会带来问题。例如,如果上游设置了安全标志,您将结束向客户端发送重复的消息,如下所示:

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

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

Set-Cookie; secure;

当然,这是doubleplusungood。

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

proxy_cookie_set_flags * HttpOnly;
proxy_cookie_set_flags authentication secure HttpOnly;

但是a,这目前不存在:(


cookie路径确实看起来是一个不错的解决方法。我想我会先尝试的。谢谢你的帮助。
ST-DDT

1
我在论坛上提出了功能请求;希望作者对此感兴趣。
富兰克林于

2

尝试使用nginx_cookie_flag_module。它将解决您的问题。

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


3
您能否详细说明如何设置和配置模块。自述文件似乎表明它需要重建nginx,在许多设置中这可能是不可接受的。
Thomas Nyman

是的,使用此模块需要重建Nginx。否则,您将无法使用它的指令。这适用于所有第三方模块。在许多情况下,nginx重建不需要花费很多时间。
Airis

@ThomasNyman重建可以通过为NGINX加付避免,因为在解释从NGINX指令
富兰克林于

1
@Airis你是作者吗?很好,伙计,但最好加上免责声明。
富兰克林于

@Aris我们尝试将模块与ngnix:alpine的1.17.1版本一起使用,但是一旦尝试将模块加载到nginx.conf,我们就会遇到以下错误。“模块“ /usr/local/nginx/modules/ngx_http_cookie_flag_filter_module.so”与二进制文件不兼容”
Lokesh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.