修复www服务trace漏洞

验证方式:curl -v -X TRACE ip:port,或使用其他接口调试工具如Postman
响应:状态行405 Method Not Allowed且响应体无内容

方案一:使用过滤器

若webserver是tomcat, 添加过滤器的方式有很多

@Component
public class TraceHttpMethodFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        if (HttpMethod.TRACE.matches(request.getMethod())) {
            response.setStatus(HttpStatus.METHOD_NOT_ALLOWED.value());
            return;
        }

        filterChain.doFilter(request, response);
    }
}

若是springcloud gateway,其使用Netty作为webserver

@Component
public class GatewayTraceHttpMethodFilter implements WebFilter, Ordered {
    @Override
    public int getOrder() {
        return HIGHEST_PRECEDENCE;
    }

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        if (HttpMethod.TRACE == exchange.getRequest().getMethod()) {
            var response = exchange.getResponse();
            response.setStatusCode(HttpStatus.METHOD_NOT_ALLOWED);
            return response.setComplete();
        }
        
        return chain.filter(exchange);
    }
}

方案二:自定义WebServerFactory配置

若WebServer是Undertow

@Configuration
public class UndertowWebServerFactoryConfig implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> {
    @Override
    public void customize(UndertowServletWebServerFactory factory) {
        factory.addDeploymentInfoCustomizers(deploymentInfo -> {
            deploymentInfo.addInitialHandlerChainWrapper(httpHandler -> {
                HttpString[] disAllowedHttpMethods = {HttpString.tryFromString(HttpMethod.TRACE.name())};
                
                return new DisallowedMethodsHandler(httpHandler, disAllowedHttpMethods);
            });
        });
    }
}

相关推荐

  1. 修复www服务trace漏洞

    2024-06-10 21:40:03       37 阅读
  2. 服务器漏洞安全修复记录

    2024-06-10 21:40:03       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-10 21:40:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-10 21:40:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-10 21:40:03       82 阅读
  4. Python语言-面向对象

    2024-06-10 21:40:03       91 阅读

热门阅读

  1. Qt中图表图形绘制类介绍

    2024-06-10 21:40:03       23 阅读
  2. 关于如何绘制文本框占位符的思路

    2024-06-10 21:40:03       30 阅读
  3. module ‘django_cas_ng.views‘ has no attribute ‘login‘

    2024-06-10 21:40:03       34 阅读
  4. 数据仓库之维度建模

    2024-06-10 21:40:03       33 阅读
  5. LeetCode 第132场双周赛个人题解

    2024-06-10 21:40:03       27 阅读
  6. 服务器硬件基础知识:新手完全指南

    2024-06-10 21:40:03       29 阅读
  7. 小白学Linux | Debian系系统与RedHat系系统日志区别

    2024-06-10 21:40:03       33 阅读
  8. STM32串口DMA 空闲中断使用笔记

    2024-06-10 21:40:03       25 阅读
  9. 第一章 - 第4节-计算机软件系统 - 课后习题

    2024-06-10 21:40:03       29 阅读
  10. 46-5 等级保护2.0主要变化

    2024-06-10 21:40:03       22 阅读
  11. 算法设计与分析(期末复习版4完结版)

    2024-06-10 21:40:03       20 阅读