我希望我的问题符合本网站的范围。
我正在开发一个内容管理系统。目前,我的登录用户在会话期间被锁定到他们的 IP 地址。不幸的是,我的一小部分用户群不断在两个或多个 IP 地址之间切换。他们中的大多数人可能使用负载平衡器。从技术上讲,没有必要将用户会话锁定到一个 IP 地址。我没想到客户会在我的网站上为一个页面请求在多个 IP 地址之间切换。
我现在想知道,允许我的客户端不断在 IP 地址之间跳转以请求页面(例如,由 xxx.xxx.xxx.xxx 请求 CSS 文件,由 yyy.yyy.yyy.yyy 请求 JavaScript 文件)有什么风险?我通常应该允许还是禁止这样做?
答案1
我的一小部分用户经常在两个或多个 IP 地址之间跳跃。
原因
假设您的用户没有主动尝试通过使用匿名服务来隐藏他们的真实 IP 地址……:
我所见过的大多数公司示例都是由较大的公司和一些 ISP 使用代理服务器集群引起的,每个代理服务器都有不同的外部 IP 地址,用户请求在该集群上进行负载平衡。
您可能会看到双栈用户通过 IPv4 和 IPv6 发出请求,并在两种协议之间切换RFC 8305以便后续请求。
另一种情况是,当我处于 Wi-Fi 接入点的极限范围时,我的设备会“随机”在 Wi-Fi 和蜂窝数据之间切换。
解决方案
在第一种情况下,您可能通过仅考虑前三个八位字节来妥协在会话中保持此类 IP 地址的“安全性”,因为通常这样的代理服务器集群都在一个小的子网内并且具有相邻的 IP 地址。
在第二种和第三种情况下,您将看到完全不同的客户端 IP 地址,甚至来自不相关的提供商。
不要将您的会话绑定到特定的 IP 地址,这更有可能破坏用户体验而不是提供实际的安全性改进。
答案2
我现在想知道,允许我的客户端不断在 IP 地址之间跳转以请求页面(例如,由 xxx.xxx.xxx.xxx 请求 CSS 文件,由 yyy.yyy.yyy.yyy 请求 JavaScript 文件)有什么风险?我通常应该允许还是禁止这样做?
主要风险是恶意用户劫持会话。如果您可以锁定一个或一小部分 IP 地址,则可以阻止来自完全不同 IP 地址的用户劫持会话。
问题是有些用户这样做是合法的。无论他们是使用负载平衡代理还是处于两个无线接入点的边缘(或其他什么),他们都使用多个 IP 地址。因此,您几乎必须允许这些用户这样做。而且很难分辨哪些用户需要多个 IP 地址,除非他们从多个 IP 地址发出请求。
减少这种影响的一种方法是使用 HTTPS。这样恶意行为者就必须有办法破坏安全层以及会话 cookie。通过不安全的连接,恶意行为者只需使用网络检查即可破坏会话 cookie。但通过 HTTPS,同一个恶意行为者需要访问对话的一端。如果恶意行为者有这个权限,那么就没有必要使用不同的 IP。
总结:通常,您应该允许同一用户从不同 IP 地址发出请求。发生这种情况有正当理由。请使用 HTTPS 来防范此类攻击。
答案3
允许我的客户端不断在 IP 地址之间跳转以进行页面请求会有什么风险
从安全角度来看 - 零风险。
现在,从实际角度来看。这意味着你不能使用某些类型的算法来确保安全或拒绝服务保护。
限制用户请求的一个简单方法是通过 IP 地址进行跟踪。由于这不需要与您的应用服务器交互,因此您可以使用较低级别的服务来执行此操作。Apache 的 mod_evasive 等软件可以做到这一点。您仍然可以使用这些技术,但用户更改 IP 地址会降低其有效性。不过,用户无论如何都会切换 IP 地址,因此这些技术从未真正有效。
一个相关但不同的用例是限制失败的登录尝试。这是为了防止暴力破解密码。但同样,如果用户更改 IP 地址,您也无能为力。真正认真的黑客甚至不会使用自己的机器。他只会在僵尸网络上花一些时间(或使用自己之前感染的僵尸网络)并通过 10,000 台其他人的 PC(IP 地址)连接到您的服务。这与限制用户的 IP 地址无关,因为它是登录前的,但需要记住这一点。
答案4
用户跳转到新 IP 地址的原因有多种。
- IPv6 隐私扩展,现在许多 IPv6 客户端会在局域网上的 /64 内跳转。
- 负载平衡代理,客户端请求被路由到多个代理之一,每个代理都有单独的 IP。
- NAT 池,边界 nat 配置有多个 IP 地址,并从池中任意分配 IP/端口组合给客户端 TCP 连接。
- 用户在不同的网络或网络的某些部分之间移动,这在当今的手机中很常见。
- 双栈用户可以在 IPv4 和 IPv6 之间跳转。
我现在想知道,允许我的客户端在页面请求中不断在 IP 之间切换有什么风险
将客户端会话锁定到 IP 的优点是它使会话窃取攻击更加困难。如果攻击者有一种机制,可以让他们窃取客户端 cookie,但不允许他们从客户端 IP 地址连接到您的服务器,那么 IP 锁定将阻止他们窃取会话。
缺点是,正如你所说,它会给一些用户带来麻烦,因为他们会发现自己的会话毫无明显原因地无效。
如今大多数网站似乎认为这种锁定带来的破坏大于好处。