【问题标题】:A cookie associated with a cross-site resource at "URL" was set without the `SameSite` attribute在“URL”处设置了与跨站点资源关联的 cookie,但未设置“SameSite”属性
【发布时间】:2020-04-03 06:31:47
【问题描述】:

在 Google Chrome 控制台中,我收到此警告“在没有 SameSite 属性的情况下设置了与“URL”处的跨站点资源关联的 cookie”。它已被阻止,因为 Chrome 现在仅在使用 SameSite=NoneSecure 设置时才提供带有跨站点请求的 cookie。 我在 Application>Storage>Cookies 下验证了相同的内容,我发现 Same Site 是“空白/空”,我想将其更新为“无”。

尝试了其他开发人员提到的一些方法,但似乎没有什么对我有用。

实现 1:用下面提到的代码更新了我的 web.config

<sessionState cookieSameSite="None" />
<httpCookies httpOnlyCookies="true" requireSSL="true" />  

//sameSite="None" 在 httpCookies 部分下不适合我,并给我一个错误消息 sameSite 属性是不允许的

实现 2:修改了我创建 Cookie 的类文件代码

HttpCookie sessionCookie = new HttpCookie("Token");
sessionCookie.Value = sessionToken;
                sessionCookie.HttpOnly = true;
                sessionCookie.SameSite = SameSiteMode.None;
sessionCookie.Secure = FormsAuthentication.RequireSSL && Request.IsSecureConnection;
sessionCookie.Domain = Request.Url.Host;
Response.Cookies.Add(sessionCookie); 

实现 3:创建一个单独的 MVC 过滤器来处理这个

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

            if (response != null)
            {
                response.AddHeader("Set-Cookie", "HttpOnly;Secure;SameSite=None");
            }

            base.OnActionExecuting(filterContext);
        }

实施4:

<rewrite>
  <outboundRules>
    <rule name="Add SameSite" preCondition="No SameSite">
      <match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" />
      <action type="Rewrite" value="{R:0}; SameSite=None" />
      <conditions>
      </conditions>
    </rule>
    <preConditions>
      <preCondition name="No SameSite">
        <add input="{RESPONSE_Set_Cookie}" pattern="." />
        <add input="{RESPONSE_Set_Cookie}" pattern="; SameSite=" negate="true" />
      </preCondition>
    </preConditions>
  </outboundRules>
</rewrite>

目标 .net Framework 4.7.2

我需要在本地机器或服务器上做些什么,或者无论如何我可以删除此警告消息。

【问题讨论】:

    标签: c# samesite .net-4.7.2 google-sso


    【解决方案1】:

    来自 OWASP cheatsheet 用于设置相同站点 cookie 以缓解 CSRF,当将相同站点属性设置为 none 时,我们还必须在 cookie 上设置安全标志。这个可以参考这个问题adding httponly and secure flag for set cookie in java web application

    所有桌面浏览器和几乎所有移动浏览器现在都支持 SameSite 属性。要跟踪实现它的浏览器和属性的使用情况,请参阅以下服务。请注意,Chrome 已宣布他们将从 Chrome 80(2020 年 2 月到期)默认将 cookie 标记为 SameSite=Lax,Firefox 和 Edge 都计划效仿。 此外,标记为 SameSite=None 的 cookie 需要 Secure 标志。

    【讨论】:

    • 我已经在我的 cookie 上添加了安全标志,并且按预期工作。但是,我在添加“SameSite =None”时遇到了问题,并且已经分享了我尝试实现的方法。
    • 它表示存在一些已知问题,其中在代码或配置中显式设置 SameSite=None 的 HttpCookies 现在使用 cookie 写入该值,而之前被省略。这可能会导致仅支持 2016 草案标准的旧浏览器出现问题。
    【解决方案2】:

    为我工作

    <configuration>
    <system.web>
    <httpCookies sameSite="None" requireSSL="true" />
    </system.web>
    </configuration>
    

    【讨论】:

      猜你喜欢
      • 2020-03-08
      • 2023-04-06
      • 2020-02-05
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 2020-07-13
      • 2020-07-04
      • 2020-11-16
      相关资源
      最近更新 更多