【问题标题】:Why does request.getRemoteAddr().equals("127.0.0.1") when accessing from a remote machine为什么从远程机器访问时 request.getRemoteAddr().equals("127.0.0.1")
【发布时间】:2012-09-19 09:18:07
【问题描述】:

我有一个在 Tomcat 中运行的 Java servlet 应用程序,出于安全原因,我只希望能够从机器本身(或者我自己的电脑)运行一个管理命令。因此,为了强制执行此操作,我检查了我收到的 HttpServletRequest 的远程地址,但 即使请求不是来自本地主机,它也总是返回 127.0.0.1

为什么会这样,我可以修复它还是有另一种方法可以仅从服务器运行我的管理命令。

【问题讨论】:

  • 您能否粘贴一些代码并说明您要在哪里执行此检查?
  • 在它运行的机器(例如 nginx)上的 tomcat 前面是否有东西转发请求?尝试查看“X-Forwarded-For”标题。
  • @Jonas Adler,谢谢,是的,当我从服务器运行而不是我的 homepc 时,x-forwarded-for 的值是不同的(尽管我从家用 pc 运行时的值与我的家用 pc 不匹配ipaddress) 所以我想我应该检查 x-forwarded-for 值并限制对我的服务器机器的访问。
  • @Robert Sever 我在我的主要(也是唯一的)Servlet 中进行检查,该 Servlet 在我的 web.xml servlet-mapping 部分中引用。
  • “X-Forwarded-For”标头由将请求转发到您的服务器(代理、负载均衡器)的实例设置。尝试找出是什么转发了您的请求。

标签: java security servlets httprequest


【解决方案1】:

首先检查请求是否具有“X-Forwarded-For”标头。如果设置了标头,则其中的第一个 IP 应该是您要查找的 IP。如果标头为空,request.getRemoteAddr() 应该返回正确的 IP。

“X-Forwarded-For”的 Wiki:http://en.wikipedia.org/wiki/X-Forwarded-For

请注意,您不能 100% 确定您获得了这样的正确 IP,因为转发实例不会强制设置“X-Forwarded-For”标头。

【讨论】:

    猜你喜欢
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 2020-12-05
    相关资源
    最近更新 更多