为了账号安全,请及时绑定邮箱和手机立即绑定

防止会话劫持

/ 猿问

防止会话劫持

凤凰求蛊 2019-09-20 16:56:31

如何防止多个客户端使用相同的会话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的多个请求来保护会话免受劫持是荒谬的,并且会破坏会话的整个目的。


查看完整描述

3 回答

?
慕后森

我们可以这样做吗?

将会话ID存储在数据库中。还存储该会话ID的IP地址和HTTP_USER_AGENT。现在,当请求到达包含该匹配会话ID的服务器时,请检查脚本中来自哪个代理和IP。

可以通过为会话创建通用函数或类来使这个基础工作,以便在处理之前验证每个请求。它几乎不需要一些微秒。但是,如果许多用户正在访问您的站点并且您拥有庞大的会话数据库,那么这可能是一个很小的性能问题。但是,与其他方法相比,它肯定会非常安全,比如=>使用重新生成会话。

在重新生成会话ID时,会话劫持的可能性很小。

假设,用户的会话ID被复制,并且该用户有时没有工作或活动,并且没有请求具有旧会话ID的服务器要求重新生成新会话ID。然后,如果会话ID被劫持,黑客将使用该会话ID并向具有该id的服务器发出请求,然后服务器将使用重新生成的会话ID进行响应,以便黑客可以继续使用该服务。实际用户将无法再操作,因为他不知道重新生成的ID是什么以及请求会话ID将在请求中传递。完全走了。

如果我错了,请纠正我。


查看完整回答
反对 回复 2019-09-20
?
料青山看我应如是

针对会话劫持有很多标准防御措施。其中之一是将每个会话与单个IP地址进行匹配。

其他方案可以使用从以下方面生成的HMAC:

  • 客户端IP的网络地址

  • 客户端发送的用户代理头

  • SID

  • 存储在服务器上的密钥

仅使用IP的网络地址的原因是用户在公共代理后面,在这种情况下,他们的IP地址可以随着每个请求而改变,但是网络地址保持不变。

当然,为了真正安全,你真的应该为所有请求强制使用SSL,这样SID就不会被潜在的攻击者拦截。但并非所有网站都这样做(:: cough :: Stack Overflow :: cough ::)


查看完整回答
反对 回复 2019-09-20

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信