启动了不安全的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]
相关推荐
Da Da 泓1 小时前
UDP和TCP中的网络编程
网络·tcp/ip·udp·java-ee
yu_zhidun1 小时前
企业电脑数据防泄密软件选型:内网终端 DLP 落地实战指南
服务器·网络·电脑
rcms152702692181 小时前
Kensington 0190-23563W伺服控制器
网络
147API1 小时前
蒸馏模型回退率突然升高,先查容量、路由还是任务分布
网络·智能路由器
abcyuu1 小时前
福州中小企业业财一体化系统权限管理与数据安全实践方案
大数据·网络·数据库
ITxiaobing20231 小时前
技术选型参考:从IPinfo出发,聊聊IP情报服务的替代方案与选型逻辑
网络·网络协议·tcp/ip
z_mazin2 小时前
逆向一种私有二进制序列化格式:从零到字节级解析器
网络·python·网络协议·算法·rpc
luj_17682 小时前
罚球线右移破防新策略
c语言·开发语言·网络·经验分享·算法
Jeremy_WW2 小时前
QSFP/QSFP-DD/OSFP 通用管理接口规范(CMIS)解读:11 Page 13h IV
网络·网络协议·信息与通信·光模块·cmis