SameSite cookie 被阻止

Posted

技术标签:

【中文标题】SameSite cookie 被阻止【英文标题】:SameSite cookie being blocked 【发布时间】:2020-12-09 17:15:55 【问题描述】:

快速概览: 我在 domain1 打开我的网站。在页面内,我加载了一个带有 url http://domain2/...

的 iframe

我不断在 chrome 上收到此警告,它影响了我的网站:

http://domain2 上的跨站点资源关联的 cookie 设置为没有 SameSite 属性。它已被阻止,因为 Chrome 现在仅在使用 SameSite=NoneSecure 设置时才提供带有跨站点请求的 cookie。您可以在 Application>Storage>Cookies 下的开发者工具中查看 cookie,并在 https://www.chromestatus.com/feature/5088147346030592 和 https://www.chromestatus.com/feature/5633521622188032 上查看更多详细信息。

我以前从未设置过 cookie,所以我不知道应该从哪里设置 cookie。我已经尝试在我的 domain2 nginx 配置中设置 proxy_cookie_path,但它似乎不起作用:

location / 
    proxy_cookie_path / "/; SameSite=None; Secure";

我还尝试添加 Set-Cookie 标头,这似乎也不起作用:

location / 
    ...
    add_header 'Set-Cookie' 'SameSite=None; Secure';

当我尝试第二种解决方案时,似乎从 chrome 上的响应中收到了标头,但 chrome 给出了以下警告:

请注意,domain2 也是我们的域,它有一个使用 Flask 框架的 python 后端。那么我应该从 python 代码或 javascript 前端添加 cookie 吗?

这真是令人沮丧。

【问题讨论】:

尝试在服务器的响应中使用SameSite=Strict @Liju 这个不拦截跨域的请求吗? 它会的,如果你想在 domain1 中使用 domain2 cookie,按照这个 chromium blog 你需要将 cookie 设置为 Set-Cookie: name=value; SameSite=None; Secure; 用于 chrome,并且在你提供的屏幕截图中没有 cookie价值对。请检查是否是问题所在。 【参考方案1】:

跨站点资源共享 - 当请求通过同一域发送时,CORS 是一个已知问题。您可以尝试使用已经存在的flask cors package 来允许同源请求。

此外,this 问答似乎与您的相关。

【讨论】:

【参考方案2】:

我在 server location 块中使用了这个 proxy_cookie_flags ~ secure samesite=none;,它起作用了。

【讨论】:

以上是关于SameSite cookie 被阻止的主要内容,如果未能解决你的问题,请参考以下文章

❲知多少❳再见,CSRF:讲解set-cookie中的SameSite属性

如何在不刷新页面的情况下检测第三方 cookie 被阻止; [?]

如果第三方 cookie 被阻止,则使用 oidc-client 跨域进行静默续订

CSRF cookie 未设置 - 可能被 kubernetes 入口阻止

阻止cookie有啥影响

我可以在 Nginx 中按 Cookie 值阻止请求吗?