美文网首页
浏览器倒逼项目升级: SameSite

浏览器倒逼项目升级: SameSite

作者: gruan | 来源:发表于2020-03-18 18:13 被阅读0次

    更新最新的 Chrome 之后, 有一些需要跨域访问的资源一直报用户未登陆. 查看 Neetwork 里的请求, 发现这些请求没有把 Session id 带到request 的 cookie 里去. 没有SessionID , 服务端就获取不到 Session, 所以一直是用户未登陆.

    之前 Chrome 是不能自动更新的, 要更新都是绕过 GFW , 下载离线包然后安装.
    不知从何时开始, Chrome 在国内可以自动更新了. 然后公司里一大票同事的浏览器都自动更新到了最新版. 然后内部系统就爆出了一堆问题...

    你妹

    跟踪了请求之后, 发现一个问题: SameSite (忘了截图, 不能给你们一个直观的展示).

    简单来说, 就是 SameSite 策略禁止了跨域访问的资源发送 cookie.

    具体参考文章: 在 ASP.NET 中使用 SameSite cookie

    做为一个草头架构师, 我也想把所有系统都给理想化, 无奈这些系统都已年代久远, 不知是哪位大神的神作, 不到万不得已, 是轻易不能改动的, 我能做的就是做一些外围的修补而已.

    SameSite

    SameSite 有3个可选值 :

    • Strict 禁止第三方 cookie
    • Lax
    • None 关闭 SameSite 选项.

    默认情况下, 不带 SameSite 标头的 cookie 被视为 SameSite=Lax


    没找到具体出处, 从网上流传的文章里截的图

    从上图可以看到默认 SameSite = Lax 影响到了 POST / iframe / AJAX / image 这些请求.

    要做到最小的修改, 只能使用 None 这个选项.

    升级项目

    • .NETFramework 4.7.2 之后才开始支持 SameSite,
    • 在 WebConfig 加入以下配置:
      <system.web>
        ...
        ...
        <compilation targetFramework="4.7.2" debug="true" />
        <httpRuntime targetFramework="4.7.2" ... />
        <httpCookies sameSite="None" requireSSL="true" />
        <sessionState cookieSameSite="None" ... />
        ...
        ...
      </system.web>
    
    • sameSite="None" 必须和 requireSSL="true" 配合使用.
    • 站点必须开启 https

    如果不使用 https, 结果是这样的:


    通过 http 访问, SameSite=None 不起作用

    this set-cookie had the "samesite=None" attribute but did not have the "secure" attribute, which is required in order to use "SameSite=None"

    用正确的姿势打开 SameSite=None

    安装补丁

    做完上面这些, 可能你还是看不到 cookie 里有 SameSite=None 这个值 .
    很有可能是因为服务器关闭了自动更新. 因为 SameSite 这个选项需要一些特定的补丁:

    .NET Framework 中支持 SameSite 的知识库文章

    所需的补丁, 请下载对应的版本

    其它

    https 里访问 http 资源, 同样是会被浏览器给 block 的.
    所以在做以上操作的时候, 请先考虑好.

    结语

    都是浏览器的锅.

    相关文章

      网友评论

          本文标题:浏览器倒逼项目升级: SameSite

          本文链接:https://www.haomeiwen.com/subject/vuaqyhtx.html