gpt4 book ai didi

java - 限制 J2EE servlet 只能从本地主机调用的正确方法是什么?

转载 作者:搜寻专家 更新时间:2023-11-01 03:20:21 26 4
gpt4 key购买 nike

我正在构建一个 servlet 来执行只能从主机本身启动的工作。我目前的计划是检查服务方法中的请求对象:

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException

我在 ServletRequest 上看到的唯一似乎相关的方法是 getRemoteHost()getRemoteAddr()。我最担心的是这是否会被欺骗(有人可以使用源 IP 127.0.0.1 发送入站请求并启动该过程)或者是否根据 127.0.0.1 检查 IP > 如果正在使用 IPv6,可能会失败。

会有一个凭证可以防止 IP 欺骗成功,但我不禁觉得有更好、更直接的方法来检查(或以其他方式限制)请求的来源。

是否有一种标准的方法可以可靠地进行这种独立于 IP 版本且不受欺骗的限制(假设攻击者可以获得凭据但无法访问服务器)?我认为从安全角度来看,凭据应该足够了;我最感兴趣的是解决这个问题的“正确”方法是什么。

编辑:

我不认为这是 java- using a filter to check remote address 的副本因为我一开始就没有考虑使用过滤器。虽然最终我采用了基于过滤器的解决方案,但这个问题也对其他潜在解决方案开放(例如,Raffaele 使用服务器套接字的建议可能对其他人有用,或者尚未发布的答案可能优于这两种方法)。

最佳答案

您可以使用过滤器:

class OnlyLocalhostFilter implements Filter {

@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
if (servletRequest.getLocalAddr().equals(servletRequest.getRemoteAddr())) {
filterChain.doFilter(servletRequest, servletResponse);
}

}

@Override
public void destroy() {

}
}

然后在 web.xml 中声明过滤 OnlyLocalhostFilter 并将其绑定(bind)到您想要的 servlet。

更新:

此解决方案并不总是有效。找到答案 here

关于java - 限制 J2EE servlet 只能从本地主机调用的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32255073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com