Security 信任X-forward-to";识别;来访者

Security 信任X-forward-to";识别;来访者,security,session,https,header,Security,Session,Https,Header,会话劫持 所以我有一个小问题。我试图识别一个访问者,这是非常困难的,如果不是不可能的$\u服务器veriables在这个问题中提到: 可能的解决方案 为了比仅仅将cookie从客户机a复制到客户机B(不幸的是childsplay)更困难一些,我想收集一些信息,并根据我存储的内容验证这一点。在我的数据库中,我想存储诸如用户代理、IP地址、操作系统等内容。我将使用MCRYPT和store对这些内容进行加密。为了与用户匹配,必须设置很多变量,这比仅仅将cookie内容复制到登录有点困难 问题 这是我的

会话劫持

所以我有一个小问题。我试图识别一个访问者,这是非常困难的,如果不是不可能的$\u服务器veriables在这个问题中提到:

可能的解决方案

为了比仅仅将cookie从客户机a复制到客户机B(不幸的是childsplay)更困难一些,我想收集一些信息,并根据我存储的内容验证这一点。在我的数据库中,我想存储诸如用户代理、IP地址、操作系统等内容。我将使用MCRYPT和store对这些内容进行加密。为了与用户匹配,必须设置很多变量,这比仅仅将cookie内容复制到登录有点困难

问题

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

下一步是什么?

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


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

任何用户都可以轻易地欺骗
X-Forwarded-For
User-Agent
HTTP头(就像将cookie从一台机器复制到另一台机器一样容易)

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

如果您担心用户在彼此之间复制cookie,是否有任何机制阻止他们共享用户名和密码凭据?如果您确实实现了一些东西来验证他们的会话是否仍在同一台客户机上,那么他们就不能通过彼此登录来解决这个问题吗

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

如果这听起来是一个很好的解决方案,请评论,如果你有任何问题,我会更新我的答案

还有两个想法:

  • 您可以使用类似的东西在浏览器中创建指纹。但是,由于这是从客户端检索各种值并创建指纹,因此如果将头设置为与其他用户的相同,则可能会伪造所有指纹。另外,由于每台机器都来自同一个可引导映像,因此无论如何这可能都是相同的
  • 滚动会话cookies:您可以使用随机重新生成会话。这将更新创建请求的客户端的会话ID,使用相同ID的任何其他客户端都将注销,因为它们正在发送旧会话ID。实际上,您可以在每个请求上执行此操作,以确保只有当前客户端使用当前会话

在您的内部网络中,您自己(或网络管理员)应该负责链中的任何部分(某种代理?)设置
X-Forwared-for
头。但是,如果用户对客户端有足够的控制权,他们可能可以自己设置该头。顺便说一句,如果你说有人故意将他们的会话cookie传递给其他人,我不会把那个会话称为“劫持”。因此,我不能完全确定您在这里尝试保护应用程序的具体场景是什么……这只是为了确保SSO系统不会因为我们自己的代码中的错误而太容易被滥用。你永远不知道他们在做什么,例如,自己给他们邮寄document.cookie。。。我不会阻止(太多的麻烦)窃取1个应用程序的cookie,但窃取所有的cookie并不酷:PIt听起来很有趣,但也有太多我个人无法完成的工作,我正在进行的项目根本没有足够的优先级。以对方身份登录,你是说在机器上?也许我在努力寻找一些并不重要的东西……我的意思是,如果你阻止他们共享会话ID,用户不就只共享他们的帐户详细信息吗?您可以通过确保每个用户只登录一次来防止后者。不管怎样,我已经更新了我的答案,增加了几个选项。遗憾的是,我的“会话”cookie不是我可以轻松重新生成的东西。应用程序可以实现这一点,但“主密钥”必须是安全的,否则它将无效。。。看起来不错,我去看看我能不能用。谢谢