【问题标题】:Playframework get client IP from server, but not from cookiesPlayframework 从服务器获取客户端 IP,但不从 cookie 获取
【发布时间】:2015-01-10 09:32:00
【问题描述】:

我想获取客户端 IP。 基于该 IP,我想授予对应用程序的访问权限。 目前我正在使用此代码从 cookie 中获取 IP:

/**
 * Gets the ip.
 *
 * @return the ip
 */
public static String getIP() {
    return Request play.mvc.Controller.request().remoteAddress();
}

但它不安全,因为用户可以轻松更改它。

所以我想从服务器连接中获取物理 IP 地址,而不是从 cookie 中获取这个 IP 地址。

我怎样才能做到这一点?请帮忙。

【问题讨论】:

  • 我已经测试过了。我可以在 linux shell 中使用此命令轻松更改 IP 地址:curl --header "X-Forwarded-For: 1.2.3.4" "localhost:9000"
  • 您是在客户端/服务器之间进行相互身份验证,还是在受信任/封闭的环境中运行?基于客户端 IP 的身份验证/访问控制听起来可能会给您带来麻烦。欺骗 HTTP 标头很容易,也可以在几乎所有其他级别进行欺骗。

标签: java ip netty playframework-2.2 server


【解决方案1】:

这不是 cookie...无论如何我能想到的最简单的解决方案是...将您的应用程序隐藏在一些轻型 HTTP 服务器下作为代理并使用其访问限制规则,好处:

  • 轻型服务器不应成为瓶颈,因为它专用于这项工作
  • 它可能知道黑客试图绕过限制的技巧和黑客行为
  • 被拒绝的 IP 甚至不会进入您的应用,因此您可以节省资源
  • 它通常有助于解决其他几项任务

最后,服务器以特殊方式处理转发的 IP,即当像 curl 显示的那样对标头进行操作时,Apache 会将其转发为列表:

1.2.3.4,123.123.123.123

所以无论如何你都可以捕获坏 IP...

【讨论】:

  • 我在考虑那个解决方案,但不确定。谢谢你的帮助。我会执行的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
相关资源
最近更新 更多