You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot应用如何拦截防范路径扫描类异常非法请求

Spring Boot拦截恶意扫描请求解决方案

你可以通过以下几种方案实现拦截,按实现复杂度和灵活度区分:

  • 路径白名单/黑名单配置
    如果你的业务接口有统一前缀(例如/api/v1/**),可以直接配置Spring MVC只放行匹配白名单前缀的请求,其余所有路径直接返回404/403。如果没有统一前缀,可维护恶意路径黑名单,命中规则的请求直接拦截。
  • Servlet全局过滤器实现
    这是兼容性最高的方案,不依赖其他组件即可实现全局拦截,代码示例如下:
    1. 自定义拦截过滤器
    import jakarta.servlet.*;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.List;
    
    public class MaliciousRequestFilter implements Filter {
        // 可根据实际扫描特征扩展拦截的路径前缀/关键词
        private static final List<String> BLOCKED_RULES = List.of(
                "/bin", "/.env", "/vendor", "/phpmyadmin", "/wp-admin", "/.git", "/phpunit"
        );
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            String requestUri = ((HttpServletRequest) request).getRequestURI();
            boolean needBlock = BLOCKED_RULES.stream().anyMatch(requestUri::startsWith);
            if (needBlock) {
                ((HttpServletResponse) response).setStatus(HttpServletResponse.SC_NOT_FOUND);
                return;
            }
            chain.doFilter(request, response);
        }
    }
    
    1. 注册过滤器到Spring容器
    import org.springframework.boot.web.servlet.FilterRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class FilterConfig {
        @Bean
        public FilterRegistrationBean<MaliciousRequestFilter> maliciousFilterRegistration() {
            FilterRegistrationBean<MaliciousRequestFilter> bean = new FilterRegistrationBean<>();
            bean.setFilter(new MaliciousRequestFilter());
            bean.addUrlPatterns("/*");
            bean.setOrder(Integer.MIN_VALUE); // 设置最高优先级,先于业务过滤器执行
            return bean;
        }
    }
    
  • Spring Security规则配置
    如果你已经接入了Spring Security组件,可以直接在安全规则里添加拦截配置,不用额外写过滤器:
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.web.SecurityFilterChain;
    
    @Configuration
    public class SecurityConfig {
        @Bean
        public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
            http.authorizeHttpRequests(auth -> auth
                    .requestMatchers("/bin/**", "/.env", "/vendor/**", "/phpmyadmin/**", "/wp-admin/**").denyAll()
                    // 此处添加你自己的业务路径放行规则
                    .anyRequest().authenticated()
            );
            return http.build();
        }
    }
    
  • 前置层拦截优化
    如果恶意请求量级很大,建议优先在Nginx等反向代理层配置规则拦截,不用把请求转发到后端Spring Boot服务,能进一步降低服务资源消耗。

另外你可以关闭Spring Boot默认的Whitelabel错误页,避免泄露服务框架信息给扫描器,application.yml配置如下:

server:
  error:
    whitelabel:
      enabled: false

内容的提问来源于stack exchange,提问作者Abraham Arnold

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:36:05