会话劫持在 PHP 中究竟是如何工作的?
我做了一个有注册/登录的网站。我可以在Chrome的开发人员工具中看到PHPSESSID cookie,所以我想知道如何使用此会话ID值劫持到我登录的帐户中,从其他浏览器开始,为了简单起见?
安全网站是否能够确定此会话被劫持并阻止它?
另外,为什么其他使用PHP的大型网站(例如Facebook)没有PHPSESSID cookie?他们是给它一个不同的名字来表示晦涩,还是他们只是使用一个完全不同的机制?
我做了一个有注册/登录的网站。我可以在Chrome的开发人员工具中看到PHPSESSID cookie,所以我想知道如何使用此会话ID值劫持到我登录的帐户中,从其他浏览器开始,为了简单起见?
安全网站是否能够确定此会话被劫持并阻止它?
另外,为什么其他使用PHP的大型网站(例如Facebook)没有PHPSESSID cookie?他们是给它一个不同的名字来表示晦涩,还是他们只是使用一个完全不同的机制?
很多好问题,问它们对你有好处。
第一。。会话只是一个饼干。“会话”不是HTTP堆栈的一部分。PHP只是碰巧提供了一些便利,使其易于使用cookie,从而引入了会话。PHP 选择 PHPSESSID 作为 cookie 的默认名称,但您可以选择任何您想要的名称。即使在PHP中,您也可以更改session_name。
攻击者所要做的就是获取您正在查看的会话cookie,并在自己的浏览器中使用它。攻击者可以使用自动脚本执行此操作,或者例如使用firebug,您可以更改当前的cookie值。
所以,是的,如果我有你的ID.如果您没有采取任何措施来阻止它,我可以窃取您的会话。
然而。。对于攻击者来说,最困难的部分是首先获取cookie。攻击者无法真正执行此操作,除非:
第一部分很难解决。您可以做一些技巧来识别启动会话的计算机(检查用户代理是否已更改,检查IP地址是否已更改),但不是防水或不是那么好的解决方案。
您可以通过确保所有流量都使用HTTPS进行加密来修复第二个问题。几乎没有理由不使用HTTPS。如果您的网站上有“登录”区域,请使用SSL!!
我希望这能回答你的问题。我现在想到的其他一些指针:
如果您使用相同的IP并使用相同的浏览器,那么您所要做的就是复制会话ID(也许还有其他cookie值:不确定浏览器特定的东西(例如其代理字符串)是否被跟踪/比较;这是依赖于实现的)。
通常,有不同的方法来跟踪用户(最终它只是用户跟踪)。例如,您可以在网页中使用Cookie或某些隐藏值。您也可以在 HTTP GET 请求、Flash Cookie 或其他身份验证方法(或这些方法的组合)中使用值。
在Facebook的情况下,他们使用几个cookie值,所以我只假设他们使用这些值之一(例如'xs')。
总的来说,没有真正100%安全的方法可以做到这一点(例如,由于中间人攻击),但总的来说,我会做以下事情:
哦,只是提一下:所有这些东西都不是PHP特有的。它们可以使用任何服务器端语言(Perl,PHP,Ruby,C#等)或服务器来完成。