【问题标题】:Cakephp/php user sessions swapping for a subset of our customersCakephp/php 用户会话交换我们的一部分客户
【发布时间】:2011-10-11 02:39:42
【问题描述】:

存在一个我们无法复制的错误,它涉及到我们企业客户的一个特定区域中的用户交换。例如,用户在登录页面上以自己的身份登录,到家时,他们是另一个用户。

这似乎是意外的会话劫持,这是线索:

  • cakephp 安全性设置为低(这仅表示 cookie 不 重写每个页面加载,并且 cookie 不做用户代理 检查)
  • 我们的 cookie 设置为不关心子域(.example.com 而不是 example.com)
  • 如果企业用户登录到错误的区域,他们将使用 302 重定向(我们应该使用 303 吗?)
  • 意外发出了 301,但用户可以复制
  • 所有受影响的用户都在一个路由器后面,通过 Sprint MPLS 共享互联网
  • 所有受影响的用户可能正在使用客户发放的计算机
  • 他们的 IT 声称没有代理缓存,也没有远程 VPN 访问,但他们声称能够从家庭计算机和网络之外复制问题。

由于我们无法以任何方式复制该问题,我们只能假设该问题特定于他们的网络。

我们如何证明他们的网络/计算机导致了会话交换?或者,当没有其他用户遇到此问题时,我们端的什么配置可能会导致此问题?

[编辑/更新]

响应评论提供的某些方向 - 我们的流量不足以发送重复的 ID。 (统计概率太低,无法看到我们看到客户复制的内容)。

另见:

更新:

我们使用 FCGI,显然需要 mod_php 才能理解 x_forwarded_for

【问题讨论】:

  • 你有没有设法解决这个问题?我面临着同样的事情。塔恩克斯

标签: php session cakephp cookies routing


【解决方案1】:

这可能是注销时会话无效的问题。请确保会话中的所有变量都正确终止或显式地为 null 终止会话中的每个对象,然后使会话无效。

第二个原因可能是使用变量检查代码中的静态变量。静态变量使用不当也可能导致此间歇性问题。

使用记录器记录映射到用户 ID 的会话 ID,这可以缩小您的问题范围并帮助您了解究竟发生了什么。

在登录操作中使现有会话无效并创建新会话并将内容复制到新会话将有很大帮助。

【讨论】:

    【解决方案2】:

    首先,不要假设客户有过错。这可能是他们一方或您一方的问题。在测试之前不要做任何假设。

    不管是谁的错,修复或帮助修复它的责任都在你身上。

    首先,一个用户变成另一个用户通常是会话 ID 问题的结果。您在 Cake 中设置的安全级别不会为每个请求重新生成会话 ID。

    我首先将$session->id() 记录为本地网络内外的用户。然后比较以查看会话 id 是否相同或是否为空字符串。解决此问题的一种方法是为每个用户生成一个唯一的 ID。

    如果每个实例的会话 ID 都是唯一的,您可能需要在负载下对其进行测试。

    重点是首先进行测试并根据发现而不是推测得出结论。

    【讨论】:

    • 您好托德,感谢您的回答。没有假设这是他们的错(我没有使用这个词)。最后有两个问题“我们如何证明他们的网络/计算机导致会话交换?或者,当没有其他用户遇到此问题时,我们端的什么配置可能导致此问题?”
    猜你喜欢
    • 2023-02-09
    • 2012-02-08
    • 1970-01-01
    • 2015-07-11
    • 2011-03-03
    • 2017-06-01
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    相关资源
    最近更新 更多