Java应用需拦截敏感路径防止信息泄露:在Filter层用正则匹配/WEB-INF/、/META-INF/等路径并返回403;Spring Security中配置denyAll;建立基于频次的告警机制并推送至监控平台。

Java应用中使用Apache Commons组件时,若未对敏感路径(如/WEB-INF/、/META-INF/、类路径资源等)做访问控制,攻击者可能通过构造URL直接读取配置文件、源码或class字节码,造成信息泄露。Apache本身不内置路径级安全审计能力,需结合Servlet容器机制与自定义防护策略实现有效拦截与告警。
识别常见敏感路径模式
以下路径在Web应用中默认不应被外部直接访问:
-
/WEB-INF/web.xml、/WEB-INF/classes/、/WEB-INF/lib/ -
/META-INF/MANIFEST.MF、/META-INF/maven/ - 以
.properties、.xml、.yml、.class结尾的内部资源路径 - 包含
classpath:、file://、jar:file:等协议的资源定位路径(尤其在Spring ResourceLoader场景下)
在Filter层拦截敏感路径请求
通过自定义HttpServletFilter统一拦截并记录可疑请求:
- 在
doFilter()中获取request.getRequestURI(),用正则匹配敏感路径(如^/WEB-INF/.*$、^/META-INF/.*$) - 对匹配请求返回
HTTP 403 Forbidden,并记录日志(含客户端IP、User-Agent、完整URI、时间戳) - 避免仅依赖
request.getServletPath(),因其可能被URL重写绕过;优先使用原始URI - 可集成SLF4J MDC,在日志中绑定traceId便于溯源
利用Spring Security增强资源访问控制
若项目基于Spring Boot/Spring MVC,推荐使用声明式配置替代硬编码Filter:
立即学习“Java免费学习笔记(深入)”;
- 在
WebSecurityConfigurerAdapter(或SecurityFilterChain)中显式禁用敏感路径:
.requestMatchers("/WEB-INF/**", "/META-INF/**", "**/*.class", "**/*.properties").denyAll() - 对静态资源目录(如
/static、/public)启用白名单,其余路径默认受限 - 启用
ResourceUrlProvider配合版本化资源路径,降低因路径猜测导致的误报风险
建立轻量级运行时告警机制
拦截本身不是终点,需形成可观测闭环:
- 对同一IP在1分钟内触发敏感路径访问≥3次,视为扫描行为,写入告警队列(如Redis List + 消费者异步通知)
- 将高危访问日志推送至ELK或Loki,设置Grafana看板实时展示TOP 10敏感路径访问来源
- 关键环境(如生产)可对接企业微信/钉钉机器人,发送含请求上下文的文本告警(示例:[SEC-ALERT] /WEB-INF/web.xml 被 203.0.113.45 访问,状态码403)
- 避免在告警中暴露内部路径结构细节,防止被用于二次探测









