会话劫持究竟是如何在PHP中运行的?

时间:2012-08-05 20:27:38

标签: php security session cookies

我已经建立了一个注册/登录的网站。我可以在Chrome的开发者工具中看到PHPSESSID cookie,所以我想知道如何使用这个会话ID值劫持我记录的帐户,为了简单起见,让我们说一个不同的浏览器?

安全网站是否应该能够确定此会话被劫持并阻止它?

另外,使用PHP的其他大型网站(例如Facebook)怎么没有PHPSESSID cookie?他们是否为隐匿性赋予了不同的名称,或者他们只是完全使用不同的机制?

3 个答案:

答案 0 :(得分:18)

很多好的问题,并且对你提出要求很好。

首先..会话只是一个cookie。 “会话”不是HTTP堆栈的一部分。 PHP恰好提供了一些便利,可以很容易地使用cookie,从而引入会话。 PHP选择PHPSESSID作为cookie的默认名称,但您可以选择任何您想要的...即使在PHP中您也可以更改session_name。

攻击者必须做的就是获取您正在查看的会话cookie,并在自己的浏览器中使用它。攻击者可以使用自动脚本或使用firebug执行此操作,您只需更改当前的cookie值即可。

所以是的,如果我有你的身份证明......如果你没有采取任何措施阻止它,我可以偷你的会话。

然而..攻击者最难的部分是首先获取cookie。攻击者无法真正做到这一点,除非:

  • 他们可以访问您的计算机
  • 他们能够以某种方式窥探您的网络流量。

第一部分很难解决..有一些技巧可以识别启动会话的计算机(检查用户代理是否更改,检查IP地址是否更改),但非防水或不防水很好的解决方案。

您可以通过确保使用HTTPS加密所有流量来解决问题。没有使用HTTPS的理由很少。如果您的网站上有“登录”区域,请使用SSL !!

我希望这样能回答你的问题。我现在想到的其他一些指示:

  • 每当用户登录时,为他们提供新的会话ID
  • 每当用户退出时,也会给他们一个新的会话ID!
  • 确保浏览器在任何情况下都无法确定会话cookie的值。如果您无法识别cookie,请重新生成一个新的!

答案 1 :(得分:6)

如果您使用相同的IP并使用相同的浏览器,您所要做的就是复制会话ID(可能还有其他cookie值:不确定是否跟踪/比较浏览器特定的内容,如代理字符串;这是依赖于实现的。)

一般来说,有不同的方式来跟踪用户(最后它只是用户跟踪)。例如,您可以在网页中使用cookie或一些隐藏值。您也可以在HTTP GET请求,Flash cookie或其他一些身份验证方法(或这些方法的组合)中使用值。

在Facebook的情况下,他们使用几个cookie值,所以我假设他们使用其中一个值(例如'xs')。

总的来说,没有真正的100%安全方式(例如由于中间人攻击),但总的来说,我会做以下事情:

  • 登录后,存储用户的IP地址,浏览器代理字符串和唯一令牌(由于上面的评论而编辑:您可以跳过他的IP地址;使整个事情不那么安全)。
  • 客户端存储用户的唯一ID(例如用户ID)和该令牌(以cookie或GET值表示)。
  • 只要第一步中存储的数据匹配,它就是同一个用户。要注销,只需从数据库中删除令牌即可。

哦,只是提一下:所有这些都不是特定于PHP的。它们可以使用任何服务器端语言(Perl,PHP,Ruby,C#,...)或服务器来完成。

答案 2 :(得分:2)

有人嗅探会话ID cookie并将其设置为后续请求。如果这是用户认证的唯一内容,则他们已登录。

大多数网站都会以某种形式使用基于Cookie的身份验证。有几种方法可以使这更安全,例如在用户登录时存储有关用户浏览器的信息(例如用户代理,IP地址)。如果其他人天真地试图复制cookie,它将无法正常工作。 (当然,也有办法解决这个问题。)你还会看到会话cookie被定期重新生成,以确保它们在特定时间内无效。

查看Firesheep以查找执行会话劫持的Firefox扩展程序。我不建议您使用它,但您可能会发现该页面上的讨论很有趣。