要解决 CORS 策略根据任意初始头进行设置的问题,并且只允许特定的 IP 地址为可信站点,可以按照以下步骤进行设置:

  1. 在每个需要设置 CORS 策略的项目中,创建一个过滤器 (Filter) 来处理 CORS 请求。在过滤器的 doFilter 方法中,检查请求的 Origin 头是否为可信站点的 IP 地址。如果不是,则拒绝该请求,并返回相应的错误信息。

  2. 在 Tomcat 的配置文件中,对每个项目的 web.xml 进行配置,将上一步创建的过滤器 (Filter) 添加到项目的过滤器链中。这样,在每个项目中都会应用该过滤器来处理 CORS 请求。

  3. 在过滤器中,通过获取请求的 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为实际的过滤器类的完整路径。

这样,所有的请求都会经过该过滤器进行处理,只有来自可信站点的请求才会被允许跨域访问,其他请求将被拒绝。

Tomcat 部署多个 Java Web 项目的 CORS 策略配置及安全漏洞修复

原文地址: https://www.cveoy.top/t/topic/pZnV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录