2010-05-04 161 views
3

过去我用来创建安全会话的方式之一就是在握手时记录客户端IP地址和用户代理。每次客户端移动页面并调用session_start()时,我还会检查存储的IP地址和用户代理是否仍然相同以防止发生劫持。PHP REMOTE_ADDR和安全会话

但是,如果有人连接从一个公司网络说,那么所有的用户可能会有相同的外部静态IP地址,他们也可以很容易地使用相同的用户代理。我可以使用哪些其他指标只能在物理机器上使用?

谢谢

+0

只要你使用的是HTTP(不是HTTPS),无论如何都是明文,所以这些检查只会给你一种保护的幻觉。它可能会阻止脚本小子... – Piskvor 2010-05-04 08:27:33

+0

如果每个请求中的IP地址不同,该怎么办? – Gumbo 2010-05-04 08:52:36

回答

2

没有真正的一般可用和可靠的指标,没有。代理有时会发送类似X-HTTP-FORWARDED-FOR的头文件,但任何自尊的路由器都不会告诉服务器哪个客户端正在访问它。

我认为你能做的最好是组合

  • 会话cookie
  • 用户代理字符串

我不会检查IP地址,首先你的理由第二,因为像AOL这样的一些ISP使用的代理服务器可以在同一个会话期间多次使用同一个客户端的IP进行更改。

想到的“软”安全措施是地理定位。如果在法国巴黎的一个知识产权中使用相同的会话cookie,并且位于澳大利亚悉尼的同一时间(或仅一小时后)使用相同的会话cookie,则可能是可能会发生一些可疑的事情。我说的是“可能的”,因为对此有合理的可能情况 - 例如,巴黎的澳大利亚人转而使用其公司的VPN。

如果你真的关心安全问题,可以在这种情况下构建触发警钟的东西,或者向用户提出一个秘密问题或其他问题。有许多地理位置提供者,例如MaxMindGeobytes。我认为像这样的东西就是大联盟,像亚马逊,PayPal等全球网站所做的,以防止欺诈行为。

+0

那么是否真的没有失效安全的方法来防止有人劫持会话?它显然很渺茫,有人会猜测一个正确的会话ID,但我不相信通过默默无闻的安全是安全。那么我们是否在说,我们真的让他们尽可能难以劫持它,但是没有完全的办法来阻止它? – christophmccann 2010-05-04 09:29:39

+0

@Christopher据我所知,在普通的普通网络服务器上使用普通的PHP,没有额外的客户端软件,确实没有防止会话劫持的自动防故障方法。然而,*猜测*会话ID非常困难,并且已经远远超出了安全性。问题通常是有人正在查看受害者的Cookie缓存。 – 2010-05-04 09:35:25

+0

非常感谢Pekka – christophmccann 2010-05-04 09:51:24

-3

会话ID。被发明是独特的

0

除此之外,我想补充说,使用用户代理也可能导致问题。我们已经看到用户代理被任何数量的“安全”软件包和ISP所改变。