如何防止多个客户端使用相同的会话ID?我之所以这样询问,是因为我想增加一层安全保护,以防止网站上的会话劫持。如果黑客以某种方式找出另一个用户的会话ID并使用该SID发出请求,那么我如何检测到服务器上有不同的客户端共享一个SID,然后拒绝劫持尝试?
编辑
经过深思熟虑后,我接受了Gumbo的回答,因为我意识到由于无状态HTTP协议的限制,我所要求的是不可能的。我忘了HTTP的最基本原理是什么,现在我想到这个问题似乎有点琐碎。
让我详细说明一下:
用户A登录example.com后,为他提供了一些随机会话ID,为简单起见,将其设为“ abc123”。该会话ID在客户端存储为cookie,并通过服务器端会话进行验证,以确保登录的用户在从一个网页转到另一个网页时仍保持登录状态。如果HTTP不是无状态的,则该cookie当然不需要存在。因此,如果用户B窃取用户A的SID,并在其计算机上创建一个值为'abc123'的cookie,则他本可以成功劫持用户A的会话,但是服务器根本无法合法地识别出用户B的会话。该请求与用户A的请求有任何不同,因此服务器没有理由拒绝任何请求。即使我们要列出服务器上已经处于活动状态的会话,并尝试查看某人是否正在访问已处于活动状态的会话,我们如何才能确定是另一个用户在非法访问该会话而不是同一用户谁已经使用会话ID登录,但只是尝试使用它发出另一个请求(即导航到另一个网页)。我们不能。检查用户代理?可以被欺骗-但是作为深度防御措施还是不错的。IP地址?可以出于正当理由进行更改-但我建议不要检查IP地址的前两个八位位组,而不是根本不检查IP地址,因为即使是出于完全正当理由而不断更改IP的数据计划网络用户通常只具有其IP更改的最后两个八位位组。
最后,无状态HTTP谴责我们永远无法完全保护我们的网站免受会话劫持,但是良好的做法(如Gumbo提供的做法)将足以防止大多数会话攻击。因此,尝试通过拒绝同一SID的多个请求来保护会话免遭劫持,这简直是荒谬的,并且会破坏会话的整个目的。