启动了不安全的HTTP方法(漏洞、springmvc)

启动了不安全的HTTP方法,如PUT、DELETE方法等。

解放方案1:

为每个方法进行限制,只有一个HTTP方法,如:

java 复制代码
@RequestMapping(path = "/remove", method = RequestMethod.POST)

或者

java 复制代码
@PostMapping("/remove")

解决方案2:

全局屏蔽PUT、DELETE方法,用Filter过滤

1. Filter类代码

java 复制代码
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;

/**
 * 全局禁用不安全HTTP方法过滤器
 * 仅允许:GET、POST、HEAD
 */
public class HttpMethodSecurityFilter implements Filter {

    /**
     * 允许的HTTP方法
     */
    private static final Set<String> ALLOWED_METHODS =
            new LinkedHashSet<>(Arrays.asList("GET", "POST", "HEAD"));

    /**
     * 拦截的不安全HTTP方法
     */
    private static final Set<String> BLOCKED_METHODS =
            new HashSet<>(Arrays.asList("PUT", "DELETE", "PATCH", "OPTIONS", "TRACE"));

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("=== HttpMethodSecurityFilter 初始化成功 ===");
        System.out.println("=== 允许的方法: " + ALLOWED_METHODS);
        System.out.println("=== 拦截的方法: " + BLOCKED_METHODS);
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;

        String method = httpRequest.getMethod();
        String uri = httpRequest.getRequestURI();

        // 打印日志,方便查看是否生效
        System.out.println("=== HttpMethodSecurityFilter 拦截请求: " + method + " " + uri);

        // 拦截不安全方法
        if (BLOCKED_METHODS.contains(method)) {
            System.out.println("=== 拦截不安全方法: " + method);
            httpResponse.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
            httpResponse.setContentType("application/json;charset=UTF-8");
            httpResponse.getWriter().write(
                    String.format(
                            "{\"code\":405,\"timestamp\":\"%s\",\"msg\":\"HTTP方法 [%s] 不允许,仅支持 %s\"}",
                            DateUtils.getDateTime(),
                            method,
                            ALLOWED_METHODS
                    )
            );
            return;
        }

        // 放行安全方法
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
        System.out.println("=== HttpMethodSecurityFilter 销毁 ===");
    }
}

2. web.xml配置

XML 复制代码
<!-- 全局禁用不安全HTTP方法过滤器 -->
<filter>
    <filter-name>httpMethodSecurityFilter</filter-name>
    <filter-class>com.enuo.dp.common.filter.HttpMethodSecurityFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>httpMethodSecurityFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

3. 验证

启动Tomcat,观察控制台

启动时应该看到:

XML 复制代码
=== HttpMethodSecurityFilter 初始化成功 ===
=== 允许的方法: [GET, POST, HEAD]
=== 拦截的方法: [PATCH, DELETE, PUT, TRACE, OPTIONS]
相关推荐
梦帮科技2 小时前
领域认知知识库图谱注入:从双式记账图网络到高质量问答对自动化合成流水线
运维·网络·数据库·人工智能·矩阵·架构·自动化
菜鸡养成中...3 小时前
卫星通信协议笔记1-协议栈
网络
hzxpaipai3 小时前
杭州企业官网怎么建设?从策划到上线的5步建站方法
运维·服务器·前端·网络
smartpi_ai4 小时前
通用脱机烧录器为什么烧不进 CI-03?下载协议的门槛、免唤醒 10 条的建议值属性
服务器·网络·ci/cd
ITxiaobing20234 小时前
自研 IP 库与 AppsFlyer 判定不一致的排查实践
网络·网络协议·tcp/ip
天天喝旺仔4 小时前
gRPC 底层原理:HTTP/2 多路复用、Protobuf 序列化与四种流模式
分布式·http·微服务·rpc
2501_937860945 小时前
中篇:TCP 为什么可靠又高效?滑动窗口、流量控制、拥塞控制与粘包全解析
服务器·网络·tcp/ip
刚及格的陆拾伍6 小时前
Wi-Fi核心知识精要:从频段到帧结构全解析
网络·物联网·网络协议·信息与通信·iot
xiaoye-duck6 小时前
《Linux 网络编程》深入理解 IO 多路复用:select 函数详解与 Echo 服务实战
linux·网络
xfan_me6 小时前
SSL 证书落地应用与网站安全加固
网络协议·安全·ssl