浏览器默认设置SameSite属性的作用
文章目录
前言
Google 在2020年2月4号发布的 Chrome 80 版本中默认屏蔽所有第三方 Cookie,即默认为所有 Cookie 加上 SameSite=Lax 属性,并且拒绝非Secure的Cookie设为 SameSite=None;SameSite的作用就是防止跨域传送cookie,从而防止 CSRF 攻击和用户追踪。
一、CSRF 攻击是什么
CSRF(Cross-site request forgery),中文名称:跨站请求伪造
CSRF攻击往往通过盗取你的 Cookie 信息,而Cookie 往往用来存储用户的身份信息,在盗取完你的 Cookie 信息后;恶意网站可以设法伪造带有正确 Cookie 的 HTTP 请求,这就是 CSRF 攻击。
简单来说就是:攻击者盗用了你的身份,以你的名义发送恶意请求。
一个典型的CSRF攻击有着如下的流程:
- 当你(受害者)登陆了某个网站AAA.com,验证身份通过后,服务器发来了一个Cookie以确定受害者的身份;于是受害者在本地生成了Cookie。
- 在这之后,受害者在未登出AAA.com的情况下,又访问了另一个危险网站BBB.com
- BBB.com此时会想要访问AAA.com,于是发送请求,进行想要进行的操作。此时的浏览器会默认携带AAA.com的Cookie。
- AAA.com接收到请求后,对请求进行验证,通过其请求中携带AAA.com的Cookie确认是你的身份凭证,误以为是受害者发送的请求。于是就接受了该请求进行相应操作
- 至此,CSRF攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让AAA.com执行了自己定义的操作。
CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题包括:个人隐私泄露以及财产安全。
二、SameSite 属性
为了防止CSRF这种攻击行为,在chrome80版本以后默认把cookie的SameSite属性设置为Lax,以此来对第三方cookie做一些限制,这样就能大大地降低被CSRF攻击的风险了。
通过设置Cookie 的SameSite属性用来限制第三方 Cookie,从而减少安全风险。
SameSite可以设置三个值。
- Strict
- Lax
- None
- Strict Strict最为严格,完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送 Cookie。换言之,只有当前网页的 URL 与请求目标一致,才会带上 Cookie。
- Lax Lax规则稍稍放宽,大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外。
- None Chrome 计划将Lax变为默认设置。这时,网站可以选择显式关闭SameSite属性,将其设为None。 不过,前提是必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效。
代码如下(示例):
下面的设置无效。
Set-Cookie: widget_session=abc123; SameSite=None
下面的设置有效。
Set-Cookie: widget_session=abc123; SameSite=None; Secure
参考文献:
- 阮一峰的《Cookie 的 SameSite 属性》。
- gjt19970425的《浏览器的SameSite策略》
- hyddd的《浅谈CSRF攻击方式》
本文简单介绍为何chrome要做此次SameSite默认策略的升级,然后简单介绍了CSRF攻击与SameSite对应的三个属性
版权归原作者 一条爱学习的咸鱼 所有, 如有侵权,请联系我们删除。