0%

微软变更cookie的默认策略

微软变更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导致丢失会话,那么无非三种方式处理.

  1. 替换会话媒介
    使用header中的Authorization来代替cookie,但是需要会话由原本的cookie换成header涉及到后端代码修改.
  2. 设置cookie的SameSite
    1
    2
    3
    <system.web>
    <sessionState mode="InProc" timeout="60"/>
    </system.web>
    增加cookieSameSite配置
    1
    2
    3
    <system.web>
    <sessionState mode="InProc" timeout="60" cookieSameSite="None"/>
    </system.web>
    但是由于windows更新的关系,这个配置有些服务器端不支持该配置,需要更新进行系统更新,具体配置处理参考官方文档.
  3. 关闭浏览器的SameSite策略
    chrome80默认是打开该变更的,关闭就可以了
    关闭配置

    参考资料

    微软变更说明文档
    导致该行为windows更新
    chrome的SameSite行为