繁体   English   中英

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

[英]How exactly does session hijacking work in PHP?

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

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

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

很多好问题,感谢你提出这些问题。

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

攻击者所要做的就是获取您正在查看的会话 cookie,并在其自己的浏览器中使用它。 攻击者可以使用自动脚本或例如使用萤火虫来做到这一点,您可以只更改当前的 cookie 值。

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

然而……对于攻击者来说最困难的部分是首先获得cookie。 攻击者不能真正做到这一点,除非:

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

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

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

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

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

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

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

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

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

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

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

有人嗅探会话 ID cookie 并将其设置为后续请求。 如果这是对用户进行身份验证的唯一方式,那么他们就已经登录了。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM