SameSite 警告 Chrome 77

Posted

技术标签:

【中文标题】SameSite 警告 Chrome 77【英文标题】:SameSite warning Chrome 77 【发布时间】:2020-02-04 19:33:09 【问题描述】:

自上次更新以来,我遇到了与 SameSite 属性相关的 cookie 错误。

Cookie 来自第三方开发者(Fontawesome、jQuery、Google Analytics、Google reCaptcha、Google Fonts 等)

Chrome 控制台的错误是这样的。

A cookie associated with a cross-site resource at <URL> was set without the `SameSite` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at <URL> and <URL>.
(index):1 A cookie associated with a cross-site resource at http://jquery.com/ was set without the `SameSite` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.
(index):1 A cookie associated with a cross-site resource at http://fontawesome.com/ was set without the `SameSite` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.
(index):1 A cookie associated with a cross-site resource at http://google.com/ was set without the `SameSite` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.
(index):1 A cookie associated with a cross-site resource at https://google.com/ was set without the `SameSite` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.
(index):1 A cookie associated with a cross-site resource at https://www.google.com/ was set without the `SameSite` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.
(index):1 A cookie associated with a cross-site resource at http://www.google.com/ was set without the `SameSite` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.
(index):1 A cookie associated with a cross-site resource at http://gstatic.com/ was set without the `SameSite` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.

我需要在本地机器或服务器上做些什么,或者只是他们应该在未来版本的库中实现的一些功能?

【问题讨论】:

与您的代码无关。这是他们的网络服务器必须支持的东西。 我也有同样的问题,是不是我们的代码不能使用第三方网站? 您可以毫无问题地使用这些库。这只是控制台将发出的警告,直到他们按照@DanielA.White 之前所说的那样在服务器中实现它。 如果第 3 方在 A future release of Chrome will only deliver ... 之前没有修复他们的 cookie 究竟会发生什么 - 我的网站会崩溃吗?看起来未来的日期是 2020 年 2 月 4 日 - 不会太远。 正如@DanielA.White 所说,这需要在第三方代码中修复,更多上下文请参见this answer。 【参考方案1】:

此控制台警告不是错误或实际问题 — Chrome 只是在宣传这一新标准以提高开发人员的采用率。

这与您的代码无关。这是他们的网络服务器必须支持的东西。

修复的发布日期为 2020 年 2 月 4 日: https://www.chromium.org/updates/same-site

2020 年 2 月:Chrome 80 稳定版的强制推出:SameSite-by-default 和 SameSite=None-requires-Secure 行为将开始向 Chrome 80 稳定版推出,用于最初的有限用户2020 年 2 月 17 日这一周,不包括周一的美国总统日假期。我们将通过逐渐增加的推广从最初的有限阶段密切监测和评估生态系统的影响。

如需完整的 Chrome 发布时间表,see here。

我通过添加响应头解决了同样的问题

response.setHeader("Set-Cookie", "HttpOnly;Secure;SameSite=Strict");

SameSite 阻止浏览器将 cookie 与跨站点请求一起发送。主要目标是降低跨域信息泄露的风险。它还提供了一些针对跨站点请求伪造攻击的保护。该标志的可能值为 Lax 或 Strict。

SameSite cookie 解释 here

请在应用任何选项之前参考this。

希望对你有所帮助。

【讨论】:

您是否研究过在引入设置 cookie 的 3rd 方脚本(如 Google Analytics 和 Google Tag Manager)时如何处理这个问题? 如果您使用的是 .NET,则在 IIS 中附加 web.config 或添加 URL ReWrite 规则可以解决此问题。归功于***.com/questions/38954821/…的解决方案@ 有没有不涉及javascript的解决方案? 我必须说,一个友好的警告确实会触发许多像我这样的开发者的强迫症。当我看到 YouTube、Google 财产、在 Google Chrome 中生成控制台错误的违规者时,我对肮脏控制台的挫败感大大增加。这就是我所说的方式。 任何想法为什么图像的简单请求会触发此错误?即使图片请求不涉及创建/读取 cookie,且图片域 URL 与 Chrome 控制台警告消息报告的 cookie URL 不匹配?【参考方案2】:

更新 - 2021 年 6 月

#same-site-by-default 的 chrome 标志已作为 Chrome 91 从 Chrome 实验面板中删除。

在 Chrome 94 之前,该标志仍​​可通过启动选项使用。

对于 macOS,使用标志启动的终端命令是:

// Chrome
open -n -a Google\ Chrome --args --disable-features=SameSiteByDefaultCookies

// Chrome Canary
open -n -a Google\ Chrome\ Canary --args --disable-features=SameSiteByDefaultCookies

更多信息:

2021 年 3 月 18 日:标记 #same-site-by-default-cookies 和 #cookies-without-same-site-must-be-secure 已从 Chrome 91 的 chrome://flags 中删除,如现在默认启用该行为。在 Chrome 94 中,命令行标志 --disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure 将被删除。 来源:Chromium SameSite Updates page。


原始答案 - 2020 年 3 月

如果您在 localhost 上进行测试并且无法控制响应标头,则可以使用 chrome 标志禁用它。

访问网址并禁用它:chrome://flags/#same-site-by-default-cookies

我需要禁用它,因为 Chrome Canary 从大约 V 82.0.4078.2 开始执行此规则,现在它没有设置这些 cookie。

注意:我只在用于开发的 Chrome Canary 中打开此标志。出于与谷歌引入它相同的原因,最好不要为日常 Chrome 浏览打开该标志。

【讨论】:

禁用这个标志并重新启动金丝雀对我不起作用,所以我只是将-SameSite 添加到主“过滤器”框中,我也用它来删除这个烦人的源映射问题 => superuser.com/questions/1523427/… 【参考方案3】:

通过向脚本标签添加跨域来修复。

发件人:https://code.jquery.com/

<script
  src="https://code.jquery.com/jquery-3.4.1.min.js"
  integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
  crossorigin="anonymous"></script>

完整性和跨域属性用于子资源 完整性 (SRI) 检查。这允许浏览器确保 托管在第三方服务器上的资源未被篡改。 推荐使用 SRI 作为最佳实践,只要图书馆是 从第三方来源加载。在 srihash.org 上阅读更多内容

【讨论】:

srihash.org 说很遗憾我们不知道这个域。 在哪里可以找到脚本标签?它在 web.config 中吗? @CarlD 从错误信息中找到导致错误的脚本然后查看网页的html源代码 @JohnMagnolia 我刚刚做了,什么也没发生。 如果我简单地将它添加到我网站的 head 标签中,它会起作用吗?【参考方案4】:

详细说明 Rahul Mahadik 的回答,这适用于 MVC5 C#.NET:

AllowSameSiteAttribute.cs

public class AllowSameSiteAttribute : ActionFilterAttribute

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    
        var response = filterContext.RequestContext.HttpContext.Response;

        if(response != null)
        
            response.AddHeader("Set-Cookie", "HttpOnly;Secure;SameSite=Strict");
            //Add more headers...
        

        base.OnActionExecuting(filterContext);
    

HomeController.cs

    [AllowSameSite] //For the whole controller
    public class UserController : Controller
    
    

    public class UserController : Controller
    
        [AllowSameSite] //For the method
        public ActionResult Index()
        
            return View();
        
    

【讨论】:

【参考方案5】:

我必须在 chrome://flags 中禁用此功能

【讨论】:

不要那样做。这只是一个技巧,而不是解决方案。另外,您正在使用 chrome 的实验性功能【参考方案6】:

谈到 Google Analytics,我发现 raik 在Secure Google tracking cookies 的回答非常有用。它将安全和相同站点设置为一个值。

ga('create', 'UA-XXXXX-Y', 
    cookieFlags: 'max-age=7200;secure;samesite=none'
);

还有更多信息在这个blog post

【讨论】:

以上是关于SameSite 警告 Chrome 77的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 控制台 SameSite Cookie 属性警告

如何解决来自 Google Chrome 的此警告? Cookie... `SameSite=None` 但没有 `Secure`

QtWebengine Cookie SameSite=无警告

SameSite cookie 被阻止

使用 SameSite 和 Secure 属性设置 Google Tag Manager cookie

为啥我会收到“通过指定其 SameSite 属性指示是不是在跨站点请求中发送 cookie”?