从服务器端获取终端用户IP地址的可靠方法是什么?

3

我在服务器端使用JSP,并希望验证用户不能从两个不同的IP地址登录。如何进行此验证?

有些人说,由于涉及某些代理,可能无法从服务器端获取客户端IP地址。那么谷歌和Facebook是如何做到这一点的?在生产环境中是否可靠?请解释一下。谢谢!

2个回答

3
他们可能使用了许多代理服务器在请求中添加的X-Forwarded-For标头来实现这一点。但是这种方法的可靠性仅限于代理服务器说实话的程度。

2

获取IP地址很容易,只需使用ServletRequest#getRemoteAddr()

但正如您已经注意到的那样,没有可靠的方法可以获取此信息 - 如果客户端使用代理,连接将似乎起源于该IP地址。我认为Facebook或Google也无法解决这个问题 - 这就是为什么您可以通过登录具有美国IP地址的代理/ssh隧道来访问仅限于美国的功能(例如,在Gmail中使用Google Voice)。

如果您只想防止用户同时从两个不同的IP地址登录,那么您需要跟踪他们当前会话(如果存在)的IP地址,并且要么

  • 停止第二次登录尝试,或
  • 使第一个会话过期

我不确定防止不同时间从不同IP地址登录可能会有什么价值,因为正在旅行或从一个网络移动到另一个网络的用户很可能会发生这种情况。


1
通常的要求是禁止多个IP地址同时登录。用户很少同时从两个IP地址访问网站。(虽然我经常这样做,从我的手机和电脑上;有很多网站我不打算注销,我相信两个浏览器都存在会话。) - sarnold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接