启动了不安全的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]
相关推荐
域智盾软件6 小时前
电脑加密软件 5 个高频问题:选型、落地、排错一次讲清
网络·电脑
Eloudy12 小时前
全文 - IMEX 第01节 -IMEX overview
运维·服务器·网络
物联网软硬件开发-轨物科技12 小时前
【技术白皮书】光伏清检一体化机器人系统解决方案技术白皮书
大数据·运维·网络·人工智能·机器人
Escalating_xu12 小时前
【Linux 网络编程】TCP 跨平台实战:用 Windows 客户端访问 Linux 服务器
linux·服务器·网络
是真的小外套14 小时前
2024年软考中级信息安全工程师|选择题考点+案例分析真题解析(含答案)
android·网络
小天源15 小时前
让访问数据可解释:IP 地球大屏、地区库更新与运行维护设计
网络·网络协议·tcp/ip
老李IT笔记16 小时前
连不上不一定是网不好:新系统不认的服务端配置卡在哪一档
运维·服务器·网络
小此方16 小时前
Linux网络(二十八):从NAT转换到正反向代理:图解内网通信、NAPT端口映射
linux·运维·网络
万年咸鱼16 小时前
WebSocket、Socket 与 HTTP 的区别详解
websocket·网络协议·http
9527出列17 小时前
基于oss的断点续传实现
http·性能优化