允许HTTP TRACE / TRACK方法 原理扫描 系统漏洞 中危 通过一个跨站追踪攻击窃取cookies和验证信任 如果不使用该服务就禁用它

添加过滤器禁用

目前经过测试发现只有通过过滤器才能做到

package com.zgzk.gateway.filter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain;
import reactor.core.publisher.Mono;

@Component
public class TraceMethodWebFilter implements WebFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        String method = exchange.getRequest().getMethodValue(); // 获取请求方法的字符串表示
        ServerHttpResponse response = exchange.getResponse();

        // 禁用 TRACE 和 TRACK 方法
        if ("TRACE".equalsIgnoreCase(method) || "TRACK".equalsIgnoreCase(method)) {
            response.setStatusCode(HttpStatus.METHOD_NOT_ALLOWED);
            return response.setComplete(); // 直接拦截,终止请求处理
        }

        return chain.filter(exchange); // 继续处理其他请求
    }

    @Override
    public int getOrder() {
        return Ordered.HIGHEST_PRECEDENCE;  // 设置高优先级,确保最先执行
    }
}

控制台指令

curl -v -X TRACE http://localhost:8080

通过访问 curl -v -X TRACE http://localhost:8080 可查看是否禁用HTTP TRACE / TRACK方法

未禁用

那么 HTTP会返回200

禁用成功

那么会根据我们配置的过滤器进行拦截,返回405以及我们设置的提示信息

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐