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

hes*_*son 22 php security cookies session

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

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

另外,使用PHP的其他大型网站(例如Facebook)怎么没有PHPSESSID cookie呢?他们是否给它一个不同的名称,或者他们只是完全使用不同的机制?

Eve*_*ert 18

很多好问题,并且对你提问很好.

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

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

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

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

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

第一部分很难解决..你可以做一些技巧来识别启动会话的计算机(检查用户代理是否发生了变化,检查IP地址是否发生了变化),但非防水或不是那么好的解决方案.

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

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

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

  • Facebook可能会使用各种组合.这可能只是一些用户ID,以及一个不同的cookie来验证它的真实性 (3认同)

Mar*_*rio 6

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

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

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

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

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

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