我制作了一个具有注册/登录功能的网站。我可以在 Chrome 的开发人员工具中看到 PHPSESSID cookie,所以我想知道如何使用这个会话 id 值来劫持我登录的帐户,让我们说一个不同的浏览器,为了简单起见?
安全网站是否应该能够确定此会话被劫持并阻止它?
另外,为什么其他使用 PHP 的大型网站(例如 Facebook)没有 PHPSESSID cookie?他们是否给它起了一个不同的名字来表示默默无闻,或者他们只是完全使用了不同的机制?
很多好问题,你问他们很好。
首先..会话只是一个cookie。“会话”不是 HTTP 堆栈的一部分。PHP 恰好提供了一些便利,使使用 cookie 变得容易,从而引入了会话。PHP 选择 PHPSESSID 作为 cookie 的默认名称,但您可以选择任何您想要的名称。即使在 PHP 中,您也可以更改 session_name。
攻击者所要做的就是获取您正在查看的会话 cookie,并在自己的浏览器中使用它。攻击者可以使用自动脚本或例如使用 firebug 来执行此操作,您只需更改当前的 cookie 值即可。
所以是的,如果我有你的 id.. 如果你不采取任何措施阻止它,我可以窃取你的会话。
然而.. 对于攻击者来说,最难的部分是首先获取 cookie。攻击者无法真正做到这一点,除非:
第一部分很难解决.. 您可以采取一些技巧来识别启动会话的计算机(检查用户代理是否更改,检查 IP 地址是否更改),但不是防水或不是那么好的解决方案。
您可以通过确保所有流量都使用 HTTPS 加密来解决第二个问题。几乎没有理由不使用 HTTPS。如果您的网站上有“登录”区域,请务必使用 SSL!
我希望这种回答能回答你的问题。我现在想到的其他一些建议:
如果您使用相同的 IP 并使用相同的浏览器,您所要做的就是复制会话 ID(可能还有其他 cookie 值:不确定是否跟踪/比较了浏览器特定的内容,例如其代理字符串;这是实现依赖)。
一般来说,有不同的方法来跟踪用户(最终它只是用户跟踪)。例如,您可以在网页中使用 cookie 或一些隐藏值。您也可以在 HTTP GET 请求、Flash cookie 或其他一些身份验证方法(或这些方法的组合)中使用值。
在 Facebook 的情况下,他们使用多个 cookie 值,所以我假设他们使用其中一个值(例如“xs”)。
总的来说,没有真正的 100% 安全的方法来做到这一点(例如,由于中间人攻击),但总的来说,我会做以下事情:
哦,顺便提一下:所有这些都不是 PHP 特有的。它们可以使用任何服务器端语言(Perl、PHP、Ruby、C#...)或一般的服务器来完成。
有人嗅探会话 ID cookie 并将其设置为后续请求。如果这是对用户进行身份验证的唯一方法,则他们已登录。
大多数网站将以某种形式使用基于 cookie 的身份验证。有几种方法可以提高安全性,例如在用户登录时存储有关用户浏览器的信息(例如用户代理、IP 地址)。如果其他人天真地试图复制 cookie,它将无法正常工作。(当然,也有解决这个问题的方法。)您还会看到会话 cookie 定期重新生成,以确保它们在特别长的时间内无效。
查看Firesheep以获取执行会话劫持的 Firefox 扩展。我不建议您使用它,但您可能会发现该页面上的讨论很有趣。