cookie的samesite属性

749 阅读2分钟

chrome 51开始,浏览器的cookie新增了一个SameSite属性,用来防止CSRF的攻击

什么是CSRF攻击?

CSRF(cross-site request forgery) 中文:跨站请求伪造,CSRF攻击简单理解:攻击者盗用了你的身份,以你的名义发送恶意请求。具体原理:

2009040916453171.jpg

SameSite属性

cookie的samesite属性用来限制第三方cookie,从而减少安全风险。 对应可以设置三个值

- Strict
- Lax
- None

1、Strict

Strict最为严格,完全禁用第三方cookie,只有访问页和请求url同源(协议、域名端口号一致才属于同源),才会带上Cookie

2、Lax

Lax规则稍稍放宽,大部分时间不会设置cookie,但是get请求除外

请求类型示例正常情况Lax
链接<a href='...'></a>发送cookie发送cookie
预加载<link rel="prerender" href='...'></link>发送cookie发送cookie
get表单<form method='GET'></form>发送cookie发送cookie
post表单<form method='POST'></form>发送cookie不发送
iframe<iframe src='...'></iframe>发送cookie不发送
ajaxaxios.get('....')发送cookie不发送
image<img src='...'></img>发送cookie不发送

chrome目前94+版本已经把默认值设置成Lax

None

设置none值必须同时设置Secure,否则无效

Set-Cookie:token=xxxx;SameSite=None;Secure

tips

在chrome某个版本可以直接禁用掉SameSite属性,但是94+版本后禁用无效,如果目前你的cookie设置不进去可以在代码里面将SameSite设置成None(如果你的cookie是服务端设置的,那么就要服务端修改一下咯,我们这边很鸡肋,叫服务端那边修改一下,叫了无数次都不肯配合来改,心累,后面经过不知道怎么的沟通,妥协了)具体请看上面none值设置,获取禁用掉chrome的SameSite ,具体设置可以步骤:

1.谷歌浏览器打开chrome://flags/

2.搜索samesite

3.SameSite by default cookies项设置为Disabled即可

(ps:欢迎各位猿友来吐槽)