Java 限制对内部IP地址的web服务访问

Java 限制对内部IP地址的web服务访问,java,web-services,security,Java,Web Services,Security,与此类似,我有一些Jersey web服务,我想限制内部办公室使用。使用HttpServletRequest检查IP地址是否足够安全?具体来说,是否存在无法信任request.getRemoteAddress返回的值的情况?我的代码是这样的: @POST @Path("update") public Response updateCityInfo(@Context HttpServletRequest request) { String remoteAdd

与此类似,我有一些Jersey web服务,我想限制内部办公室使用。使用HttpServletRequest检查IP地址是否足够安全?具体来说,是否存在无法信任request.getRemoteAddress返回的值的情况?我的代码是这样的:

    @POST
    @Path("update")
    public Response updateCityInfo(@Context HttpServletRequest request) {
        String remoteAddress = request.getRemoteAddr();
        if (!remoteAddress.startsWith("10.10")) {
            return Response.status(Status.FORBIDDEN).build();
        }
        ...

我不太关心安全性,我只希望某个网络中的任何人都能够访问该端点

那可能行得通。然而,也有一些警告。首先,如果您在loadbalancer/proxy后面,那么remoteAddress很可能是代理的地址,而不是发起请求的客户端的地址。由于负载平衡器通常位于防火墙内部,它们可能有一个10.*地址


这似乎应该在防火墙级别处理,而不是在应用程序级别处理。

在网络级别过滤来自外部地址的传入请求可以很容易地防止应用程序被欺骗。但这并不意味着您的应用程序在安全方面没有做任何事情。您的应用程序应该具有适当的身份验证和授权机制。

此检查似乎没有问题。可能更好的地方是负载平衡器级别,它将过滤掉所有外部IP地址。没有负载平衡器,它只用于开发和QA服务器,将从Someone框中调用它来执行一些配置重新加载。我只是想确保它不会被本地网络以外的任何人调用。即使没有负载平衡器,也必须在所有服务器后面设置防火墙,以限制对外部IP的访问。您还可以配置apache来阻止IPs,我主要关心的是,您的应用程序只应执行所需的验证/自动化/角色/权限等以及其他与业务相关的操作,阻止和取消阻止是基于基础设施的服务,您的应用程序不应负责。是的,同意,但另一件事是,我只想限制其中一些服务,而不是其他服务。我想你的每个服务都会有一些唯一/不同的URL,所以只允许基于服务URL进行访问。我明白你的观点,并同意99%的情况,但这是一个无状态的服务,我想通过URL访问,并让它重新加载一些配置数据。我们已经通过JMX公开了它,但需要足够频繁,所以我只想从卷发或浏览器中点击它。无论您想点击什么,您都需要确保这些IP在您的终端被列入白名单