如何解决Set-Cookie HTTP 标头和 CSRF 的松散与严格
我只是在读https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie:
Lax:cookie 不会在跨站点请求上发送,例如调用 加载图像或帧,但在用户导航到 来自外部站点的原始站点(例如,如果遵循链接)。这是 如果未指定 SameSite 属性,则为默认行为。
如果这是默认的,那么这不是意味着CSRF攻击不会发生吗? 如果有人加载一个在后台运行 Javascript 的恶意网站,向受害者当前登录的网站发出简单的 POST 请求,那么默认行为是不会发送 cookie,对吗?
另外,为什么有人会选择使用 Strict 而不是 Lax? 为什么您要阻止用户的浏览器在导航到原始网站时向该网站发送 cookie,而 Strict 正是这样做的?
解决方法
当 SameSite
为 Lax
时,CSRF 攻击仍然可能发生。它可以防止您提到的跨站点 POST
攻击,但是如果网站通过 GET
请求触发不安全操作,那么它仍然是可能的。例如,许多网站目前会通过 GET
请求触发注销,因此攻击者可以轻松地将用户从其会话中注销。
标准的addresses this直接:
松懈的执行提供了合理的深度防御 CSRF 依赖于不安全的 HTTP 方法(如“POST”)的攻击,但不 提供针对 CSRF 作为一般攻击类别的强大防御:
-
攻击者仍然可以弹出新窗口或触发顶级 导航以创建“同一站点”请求(如 在第 5.2.1 节中描述),这只是沿路的减速带 剥削之路。
-
像
<link rel='prerender'>
这样的特征可以 被利用来创建“同站点”请求而没有用户风险 检测。
鉴于此,有人会使用 Strict
的原因很简单:它可以防止更广泛的 CSRF 攻击。当然,这是一种权衡,因为它会阻止某些使用您网站的方式,但如果这些用例对您来说并不重要,那么这种权衡可能是合理的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。