security - 将 X-Forwarded-For 信任为 "identify"访问者

标签 security session https header

session 劫持

所以我有一个小问题。我正在尝试识别访问者,这很难通过 $_SERVER veriables 来实现,如以下问题所述:Preventing session hijacking .

可能的解决方案

为了比仅将 cookie 从客户端 A 复制到客户端 B(可悲的是 child 游戏)更难一些,我想收集一些信息并根据我存储的内容对其进行验证。在我的数据库中,我想存储用户代理、IP 地址、操作系统等内容。我将使用 MCRYPT 加密并存储。为了匹配用户,必须设置很多变量,这使得它比仅仅复制 cookie 内容以登录更难。

问题

这是我的问题开始的时候……用户代理和操作系统几乎完全相同。原因是它是具有相同可引导镜像的胖客户端。另一个问题是IP。数据中心的服务器连接到办公室。对于我们的应用程序(即使无法从外部访问),每个客户端的 IP 地址都是相同的。我发现我可以尝试使用 X-Forwarded-For header 来区分 IP 地址,从而使用户更加独特。

下一步是什么?

我想知道以下内容:如何确保始终设置 X-Forwarded-For 而无需客户端可以访问的任何内容?是否必须通过路由在那里添加一些东西?我们的连接是 https,所以我怀疑我是否可以“注入(inject)”一些东西。其次,如果我可以注入(inject)这样的东西,用户客户端可以这样做吗?

客户端位于我们的内部办公室网络中,并且无法从外部访问应用程序(在 php 中运行)

最佳答案

X-Forwarded-ForUser-Agent HTTP header 很容易被任何用户欺骗(就像将 cookie 从一台机器复制到另一台机器一样容易) .

Chrome 扩展程序,例如 Header Hacker可以在客户端上使用,并且由于您的站点使用的是 HTTPS,因此无法在途中添加这些 header (因为 header 需要添加到 OSI 应用层,而不是传输层)。

如果您担心用户相互复制 cookie,是否有任何机制可以阻止他们共享用户名和密码凭据?如果您确实设法实现了一些验证他们的 session 保留在同一台客户端计算机上的东西,他们难道不能简单地通过彼此登录来绕过它吗?

除了我的问题之外,对于解决方案,您可以将本地代理引入您的内部网络,纯粹用于连接到您在数据中心的站点。该站点应拒绝任何不是来自代理服务器 IP 的连接(将 Web 服务器或防火墙配置为仅接受代理服务器的客户端 IP 进行 Web 连接)。使用这种方法,您需要在代理上安装一个 SSL 证书,每个客户端机器都可以信任它。这将使代理服务器能够解密流量,添加适当的 IP 地址 header (覆盖客户端设置的任何内容),然后将其转发到您的服务器。然后,服务器代码可以安全地检查 X-Forwarded-For header ,以确保它在每个用户 session 中保持不变。

如果这听起来是个不错的解决方案,请在有任何问题时发表评论,我会更新我的答案。

另外两个想法:

  • 您可以使用类似 panopticlick 的东西来对浏览器进行指纹识别。 .然而,由于这是从客户端检索各种值并创建指纹,如果 header 设置为与另一个用户的相同,则所有这些都可能被欺骗。此外,由于每台机器都来自相同的可引导镜像,因此这很可能是相同的。
  • 滚动 session cookie:您可以使用 session_regenerate_id() 随机重新生成 session .这将更新创建请求的客户端的 session ID,然后使用相同 ID 的任何其他客户端将被注销,因为它们发送的是旧 session ID。实际上,您可以对每个请求执行此操作,以确保只有当前客户端在使用当前 session 。

关于security - 将 X-Forwarded-For 信任为 "identify"访问者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21354859/

相关文章:

php - Zend_Auth setCredentialTreatment

c# - 从用户输入中获取查询

java - 删除/清零安全敏感图像的最佳实践?

c# - 延长 asp.net session 结束日期?

asp.net - 我如何使用 AJAX 来确定用户的 session 是否已过期,然后将其返回到登录页面?

java - Spring MVC 4 + Tomcat 7,如何用JavaConfig实现HTTPS?

security - SSL 徽章未显示

asp.net - 了解 ASP.Net session 生命周期

Django HTTPS 和 HTTP session

iOS iPhone iPad 限制 SSL/HTTPS 加密位