Tomcat 部署多个 Java Web 项目的 CORS 策略配置及安全漏洞修复
要解决 CORS 策略根据任意初始头进行设置的问题,并且只允许特定的 IP 地址为可信站点,可以按照以下步骤进行设置:
-
在每个需要设置 CORS 策略的项目中,创建一个过滤器 (Filter) 来处理 CORS 请求。在过滤器的 doFilter 方法中,检查请求的 Origin 头是否为可信站点的 IP 地址。如果不是,则拒绝该请求,并返回相应的错误信息。
-
在 Tomcat 的配置文件中,对每个项目的 web.xml 进行配置,将上一步创建的过滤器 (Filter) 添加到项目的过滤器链中。这样,在每个项目中都会应用该过滤器来处理 CORS 请求。
-
在过滤器中,通过获取请求的 Origin 头的值,来判断请求是否来自可信站点。如果来自可信站点,则允许跨域请求,否则拒绝请求。
以下是一个示例的过滤器代码:
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CorsFilter implements Filter {
private static final String TRUSTED_IP_1 = 'https://172.16.15.87';
private static final String TRUSTED_IP_2 = 'https://172.16.15.89';
public void init(FilterConfig filterConfig) throws ServletException {}
public void destroy() {}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
String originHeader = request.getHeader('Origin');
if (originHeader != null && (originHeader.equals(TRUSTED_IP_1) || originHeader.equals(TRUSTED_IP_2))) {
response.setHeader('Access-Control-Allow-Origin', originHeader);
response.setHeader('Access-Control-Allow-Credentials', 'true');
response.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
response.setHeader('Access-Control-Allow-Headers', 'Content-Type');
filterChain.doFilter(request, response);
} else {
response.sendError(HttpServletResponse.SC_FORBIDDEN, 'Invalid origin');
}
}
}
将上述代码保存为 CorsFilter.java 文件,并编译为 CorsFilter.class。
接下来,在每个项目的 web.xml 中添加以下配置:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>com.example.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意替换com.example.CorsFilter为实际的过滤器类的完整路径。
这样,所有的请求都会经过该过滤器进行处理,只有来自可信站点的请求才会被允许跨域访问,其他请求将被拒绝。
原文地址: https://www.cveoy.top/t/topic/pZnV 著作权归作者所有。请勿转载和采集!