Cookie的作用域不区分协议和端口

      最后更新:2022-08-02 19:46:35 手机定位技术交流文章

      在这里插入图片描述

      1. 问题描述

      同一套前端ERP程序部署了多个帐户,这两个帐户有相同的协议、IP和不同的端口。

      http://xxx.xx.x.xxx:8002
      http://xxx.xx.x.xxx:9003

      当同一用户在同一浏览器(Chrome)上运行时,从两个不同的端口打开程序时,跳到登录页有问题。

      2. 排查过程

      检索结果显示,有关的cookie问题存在。 检索过程如下:

      • 登录8002然后,进入“饼干”sessionId=b130ffea-c9dc-46cf-b37d-e28db9ce8ea3;。此时8002标签页可以与服务端进行正常通信.
      • 打开一个新的标签页并登录9003访问Cookie的程序。sessionId=b74fe72d-822e-410a-965f-125540156fd7;。此时9003标签页可以与服务端进行正常通信.
      • 切换到8002标签页,现在与后端通信,要求载入的cookie成为9003 cookiesessionId=b74fe72d-822e-410a-965f-125540156fd7.程序跳到登录页。

      前面的程序不会对cookie做任何事情。 请注意,在第二个标签页上9003登录后,第一个标签页8002饼干已经盖上了.

      3. 相关知识

      搜索信息后,知道 cookie 不会区分终端和LocalStorage和 SessionStorage。

      HTTPcookie端口是否具体

      1.介绍

      由于历史原因,cookie包含大量的安全和隐私信息。例如,服务器可以指示指定的cookie用于“安全”连接,但当有活跃的网络攻击者时,安全属性不提供完整性。 同样,在指定的主机上的Cookie被共享在该主机的所有端口之间,甚至传统的网络浏览器使用的“共同源策略”也隔离了通过不同端口检索的内容。

      8.5 弱机密性

      Cookie不提供端口隔离。如果在端口上运行的服务中可读的cookie,也可以从同一服务器的另一个端口运行的服务中读取Cookie。如果服务可以在一个端口上编写Cookie,同样的服务器的另一个端口上运行的服务也可以编写Cookie。出于这个原因,服务器不应在同一主机的不同端口运行相互不信任的服务,并使用Cookie存储安全敏感信息。

      [Google]浏览器安全手册

      默认情况下, cookie 范围仅限于当前主机名的所有 URL - 而不是绑定到端口或协议信息.

      其它
      当您在http://localhost:300和http://localhost:400之间跳过时,Chrome发送相同的cookie,所以每个服务不能理解cookie并生成一个新的cookie。

      但如果访问http://localhost:3000和http://127.0.0.1:4000,就不会有问题。因为Chrome浏览器保持一个cookie本地主机,一个用于127.0.0.1

      4. 解决方案

      1. 单独使用两个浏览器打开页面
      2. 摒弃cookie,使用sessionStorage或localstorage保存用户token,请求头使用

      5. 感想

      遇到这个问题,首先想到的是去 mdn 搜索 Cookie 功能,了解到影响Cookie 的作用域两个属性:Domain 和 Path 。在这个问题上我们没有设置域名和路径,我们检查了路径的默认值是 orgin 相同的域(浏览器相同的源策略),这使我很迷茫,现在端口不同,不就是不同域吗?答案就是上面说的: Cookie功能不区分协议和端口,也就是说,只要IP地址相同,不同的协议或不同的端口,所有饼干都覆盖了。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/31336.html

          热门文章

          文章分类