对于一个安全的网站,它是否能够确定该会话正在被劫持并防止其发生呢?
此外,其他使用PHP的大型网站(例如Facebook)为什么没有PHPSESSID cookies? 他们是否为了混淆而给它取了不同的名称,还是使用了完全不同的机制?
有很多好问题,你能问出这些问题非常棒。
首先,一个“session”只是一个cookie。'session' 不是HTTP协议栈的一部分。 PHP只是恰巧提供了一些方便来处理cookies,因此引入了sessions。PHP选择PHPSESSID作为cookie的默认名称,但您可以选择任何您想要的名称。即使在PHP中,您也可以更改session_name。
攻击者需要做的就是获取您正在查看的session cookie,并在其自己的浏览器中使用它。攻击者可以使用自动化脚本或例如使用firebug,您可以更改当前cookie值。
所以,如果我有您的id..如果您没有采取任何预防措施,我就可以窃取您的session。
然而..对于攻击者来说,最难的部分是首先获取cookie。攻击者无法做到这一点,除非:
第一部分很难解决..您可以做一些技巧来识别启动会话的计算机(检查用户代理是否更改,检查IP地址是否更改),但没有无懈可击或不那么好的解决方案。
您可以通过确保所有流量都使用HTTPS加密来解决第二个问题。几乎没有理由不使用HTTPS。如果您的网站上有“已登录”区域,请使用SSL!
我希望这种方式回答了您的问题..我现在想到了一些其他要点:
某人嗅探了会话ID cookie并将其设置为后续请求。如果这是唯一验证用户的东西,他们就已经登录了。
大多数网站将使用基于cookie的身份验证。有几种方法可以使其更安全,例如在用户登录时存储关于用户浏览器的信息(例如用户代理、IP地址)。如果有人尝试复制cookie,那么它将无法起作用(当然,也有办法绕过此限制)。您还将看到会话cookie被定期重新生成,以确保它们的有效期不会特别长。
请查看Firesheep,这是一个Firefox扩展,用于执行会话劫持。我不建议您使用它,但您可能会发现该页面上的讨论很有趣。
session_regenerate_id(true)
来增加安全性。我不想检查用户的 IP 地址,因为对于一些用户来说,它们的 IP 地址会因为合法原因而频繁更改。 - hesson