10

我遇到的问题可能无法解决,如下所示:

我有一个客户,它是一个由 1,500 多名用户组成的大型组织,分布在 7-8 个不同的地点。该应用程序是基于 Kohana v3.0 框架构建的 PHP 应用程序。该组织位于 ISP 级别的代理过滤服务器后面。每个位置都有一个主要的公共 IP 地址,该地址通过代理汇集到网络。每个用户都有一个由雇主发放的 Mac 或 Windows 工作站。

他们正在经历的似乎是 cookie 冲突。示例:一个用户在他们的工作站登录,然后另一个用户从同一位置、不同的工作站、使用相同的操作系统和浏览器类型登录。第二用户通过接收与第一用户匹配的新生成的cookie(令牌)来接收第一用户的活动会话。这似乎只与 'authautologin' cookie 相关(在登录屏幕上启用记住我复选框时设置),但我保持我的选项开放以从代理缓存(我无法证明代理正在缓存中)。

由于网络设置,服务器看到数百个用户使用相同的用户代理从相同的 IP 地址登录。我最初的想法是,Kohana v3 生成浏览器(用户代理)特有的 cookie 的方式对于这个现实世界的应用程序来说不够独特。

有没有人经历过这样的事情?在 cookie 和会话生成中应该采取哪些适当的措施?在数据库中管理 cookie 和活动会话会更好吗?

  • Kohana 模块:Jelly-Auth、Jelly 和 Auth

  • 服务器:Apache/2.2.9 (Debian) mod_fastcgi/2.4.6 mod_jk/1.2.26 PHP/5.2.6-1+lenny8 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g

  • 已知浏览器:IE 8 和 9、Firefox(操作系统和 Win)和 Safari(操作系统)

4

3 回答 3

2

哇,这是一个令人讨厌的漏洞,很好!

到目前为止,在 PHP 下生成 cookie 的最佳方法是让 PHP 来完成: session_start(). 就这样!如果您正在生成自己的 cookie,那么您确实在某个地方搞砸了。现在你可以使用$_SESSION[]超级全局了。session_start()最佳实践是在您的应用程序中访问 $_SESSION 之前调用一个公共头文件。

您可能应该考虑其他问题,例如owasp a9、 csrf 和 cookie 标志:HTTP_Only和“安全”标志(通过 https 强制 cookie)。

于 2011-12-19T16:51:16.527 回答
2

这只是一个想法,但有/曾经是(取决于您的 Debian 和 PHP 版本)PHP 会话的错误。我建议你尝试:

  1. 检查此链接- 这可能与您的问题无关,但值得一试
  2. 切换到数据库驱动程序 - 我会给 90% 的机会来解决所有问题
  3. 在不同的 Debian 服务器上进行测试 - 虽然这可能不容易完成
于 2011-12-19T18:14:48.460 回答
0

我不确定我是否理解正确,但是......我知道请求是这样的:

用户(工作站)==> 代理()==> 互联网 ==> 公司网站(以及反向响应)。

检查代理是否设置了“HTTP_X_FORWARDED_FOR”(在 $_SERVER 超全局变量中)。这可能是确定用户工作站 IP 地址的唯一方法。如果是这样,你就完成了。

于 2011-12-27T21:30:07.933 回答