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