SameSite 警告 Chrome 77

IT技术 javascript google-chrome cookies samesite
2021-01-20 01:29:24

自上次更新以来,我遇到了与 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.

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

6个回答

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

它与您的代码无关。这是他们的 Web 服务器必须支持的内容。

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

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

有关完整的 Chrome 发布时间表,请参阅此处

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

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

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

此处解释SameSite cookie

在应用任何选项之前参考此内容

希望这对你有帮助。

您是否对在引入设置 cookie 的 3rd 方脚本(如 Google Analytics 和 Google Tag Manager)时如何处理此问题进行了研究?
2021-03-15 01:29:24
任何想法为什么一个简单的图像请求会触发这个错误?即使图像请求不涉及创建/读取 cookie,并且图像域 URL 与 Chrome 控制台警告消息报告的 cookie URL 不匹配?
2021-03-18 01:29:24
如果您使用 .NET,在 IIS 中附加 web.config 或添加 URL 重写规则将解决此问题。幸得在解决 stackoverflow.com/questions/38954821/...
2021-03-20 01:29:24
我必须说一句友好的警告真的会触发像我这样的许多开发人员的强迫症。当我看到 YouTube、Google 的财产、在 Google Chrome 中产生控制台错误的罪犯时,我对肮脏的控制台的沮丧感大大增加了。这就是我所说的方式。
2021-04-05 01:29:24
有没有不涉及 JavaScript 的解决方案?
2021-04-09 01:29:24

更新 - 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 日:自 Chrome 91 起,标记 #same-site-by-default-cookies 和 #cookies-without-same-site-must-be-secure 已从 chrome://flags 中删除,因为行为是现在默认启用。在 Chrome 94 中,命令行标志 --disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure 将被删除。来源:Chromium SameSite 更新页面


原始答案 - 2020 年 3 月

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

访问网址并禁用它:chrome://flags/#same-site-by-default-cookies SameSite 默认 cookie 截图

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

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

禁用此标志并重新启动金丝雀对我不起作用,所以我只是添加-SameSite到主“过滤器”框,我还用它来删除这个烦人的源映射问题 => superuser.com/questions/1523427/...
2021-04-01 01:29:24

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

来自: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 阅读更多

@JohnMagnolia 我刚刚做了,什么也没发生。
2021-03-17 01:29:24
我在哪里可以找到脚本标签?它在 web.config 中吗?
2021-03-19 01:29:24
如果我只是将它添加到我网站的 head 标签中,它会起作用吗?
2021-03-19 01:29:24
@CarlD 从错误消息中找出导致错误的脚本,然后查看网页的 html 源代码
2021-04-05 01:29:24
srihash.org说很遗憾我们不知道这个域。
2021-04-06 01:29:24

为了详细说明 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);
    }
}

家庭控制器.cs

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

或者

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

我不得不在 chrome://flags

在此处输入图片说明

不要那样做。这只是一个黑客而不是解决方案。另外,您正在使用 chrome 的实验性功能
2021-03-13 01:29:24