Cookie-SameSite属性
一、CSRF攻击
我们知道cookie作为标识用户身份的存在,可以帮助我们不需要输入账号密码进行登录就可以完成认证执行某些操作;假设我们在访问第三方网站时,网站页面存在一条ajax请求是Post请求地址为:执行银行账户的转账操作,由于你的浏览器内包含cookie,那么这条请求就会携带cookie然后请求就会被执行;
二、同站和跨站
这边对于同站的理解非常重要:
Cookie中的同站:只要两个url地址的有效顶级域名+二级域名是相同的就算是同站,例如www.a.smile.com 和 www.b.smile.com 是同站,而www.taobao.com 和 www.baidu.com非同站;a.github.io 和 b.github.io 是跨站(原因:.com是一级域名,github.io是二级域名)。
三、Samesite存在的作用
既然我们知道了同站和跨站的区别,SameSite存在的意义就是去防止CSRF攻击,我们去思考一下,如果是你会怎么设计,再联想一下刚才的同站,我们肯定想只要在我的站内都是允许你携带cookie,这样才能保证更好的用户体验,主要我注册了二级域名,表明这个是我的站,在我的站内自然允许cookie携带,之前我也想过会不会有有人恶意注册二级域名,当然,这个二级域名不是想注册就能注册的;
四、Samesite三个属性
之前看的一篇博客写的是只有当前网页和url和请求目标一致,才会带上cookie,经过测试发现跨子域也是没有问题的,即当前网址为backend.smile.com请求网址为front.smile.com是没有问题的,是允许的,因为是同站;
五、测试
5.1、一开始浏览器中没有cookie;
//判断浏览器中有误cookie
@GetMapping("/index")
public Obje