微软变更cookie的默认策略
正文
SameSite是IETF草案标准,旨在为跨站点请求伪造(CSRF)攻击提供某种保护.该标准草案最初于2016年起草,于2019年更新.该更新不兼容2016的标准.
变更的重点是未明确指定时默认行为由None变更为Lax,chrome80版本官方说法默认开启该行为,在windows服务器或者个人机更新补丁时,可能会更新到该行为
由
1 | Set-Cookie: ASP.NET_SessionId=hlftr5atg4lmsnzyx5disqms; path=/; HttpOnly; |
变更为
1 | Set-Cookie: ASP.NET_SessionId=hlftr5atg4lmsnzyx5disqms; path=/; HttpOnly; SameSite=Lax |
该行为在跨域名请求时,如果服务器端依赖cookie进行会话处理的话,那么就会丢失会话.
原因是Lax模式下post请求cookie跨域是未进行传递的.
解决方案
由于是丢失cookie导致丢失会话,那么无非三种方式处理.
- 替换会话媒介
使用header中的Authorization来代替cookie,但是需要会话由原本的cookie换成header涉及到后端代码修改. - 设置cookie的SameSite 增加cookieSameSite配置
1
2
3<system.web>
<sessionState mode="InProc" timeout="60"/>
</system.web>但是由于windows更新的关系,这个配置有些服务器端不支持该配置,需要更新进行系统更新,具体配置处理参考官方文档.1
2
3<system.web>
<sessionState mode="InProc" timeout="60" cookieSameSite="None"/>
</system.web> - 关闭浏览器的SameSite策略
chrome80默认是打开该变更的,关闭就可以了
参考资料
微软变更说明文档
导致该行为windows更新
chrome的SameSite行为