会话劫持在 PHP 中究竟是如何工作的?

2022-08-30 18:32:22

我做了一个有注册/登录的网站。我可以在Chrome的开发人员工具中看到PHPSESSID cookie,所以我想知道如何使用此会话ID值劫持到我登录的帐户中,从其他浏览器开始,为了简单起见?

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

另外,为什么其他使用PHP的大型网站(例如Facebook)没有PHPSESSID cookie?他们是给它一个不同的名字来表示晦涩,还是他们只是使用一个完全不同的机制?


答案 1

很多好问题,问它们对你有好处。

第一。。会话只是一个饼干。“会话”不是HTTP堆栈的一部分。PHP只是碰巧提供了一些便利,使其易于使用cookie,从而引入了会话。PHP 选择 PHPSESSID 作为 cookie 的默认名称,但您可以选择任何您想要的名称。即使在PHP中,您也可以更改session_name。

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

所以,是的,如果我有你的ID.如果您没有采取任何措施来阻止它,我可以窃取您的会话。

然而。。对于攻击者来说,最困难的部分是首先获取cookie。攻击者无法真正执行此操作,除非:

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

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

您可以通过确保所有流量都使用HTTPS进行加密来修复第二个问题。几乎没有理由不使用HTTPS。如果您的网站上有“登录”区域,请使用SSL!!

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

  • 每当用户登录时,请为他们提供新的会话 ID
  • 每当用户注销时,还要给他们一个新的会话ID!
  • 确保在任何情况下浏览器都不能确定会话 Cookie 的值。如果您不认识饼干,请重新生成一个新的饼干!

答案 2

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

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

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

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

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

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


推荐