在Google Chrome控制台中,我收到以下警告:“设置了与跨站点资源“ URL”关联的cookie,但未设置SameSite
属性”。它已被阻止,因为Chrome现在仅在将跨站点请求设置为SameSite=None
和Secure
的情况下才提供cookie。
我在“应用程序”>“存储”>“ Cookies”下验证了相同的内容,发现我的“同一站点”为“空白/空”,我想将其更新为“无”。
尝试了其他开发人员提到的一些方法,但似乎没有任何帮助。
实现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
我是否需要在本地计算机或服务器上进行任何操作,或者可以删除此警告消息的任何方式。
答案 0 :(得分:1)
通过OWASP cheatsheet设置相同的站点cookie以减轻CSRF,当将相同的站点属性设置为none时,我们也必须在cookie上设置安全标志。这可以通过参考问题adding httponly and secure flag for set cookie in java web application
来完成。所有台式机浏览器和几乎所有移动浏览器现在都支持SameSite属性。要跟踪实现该功能的浏览器以及该属性的用法,请参考以下服务。请注意,Chrome已宣布从Chrome 80起默认将cookie标记为SameSite = Lax(将于2020年2月到期),并且Firefox和Edge都计划效仿。 此外,标记为SameSite = None的cookie将需要Secure标志。
答案 1 :(得分:1)
为我工作
<configuration>
<system.web>
<httpCookies sameSite="None" requireSSL="true" />
</system.web>
</configuration>