允许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以及我们设置的提示信息