Java 中怎么在参数校验中结合黑名单词库过滤实现 XSS 与 SQL 注入防御

梦瑶吖_2390

梦瑶吖_2390

2026-09-17

411人浏览

原创

必须用过滤器+黑名单,因为@valid注解仅校验格式而非内容安全,无法拦截onerror=alert(1)或' or '1'='1等语义型攻击;过滤器工作在servlet最前端,统一处理所有请求入口,并通过html解码、小写归一、正则匹配(含大小写不敏感与绕过变形)实现可靠防护。

java 中怎么在参数校验中结合黑名单词库过滤实现 xss 与 sql 注入防御

在 Java Web 项目中,仅靠注解式参数校验(如 @NotBlank、@Pattern)无法覆盖 XSS 和 SQL 注入这类语义型攻击。真正有效的做法是:在请求进入业务逻辑前,用过滤器统一拦截所有参数,结合黑名单词库做预处理——不是替代参数校验,而是补上它缺失的“内容安全”一环。

为什么必须用过滤器+黑名单,而不是只靠 @Valid

注解校验只管格式,不管内容意图。比如:
- @Pattern(regexp = "^[a-zA-Z0-9_]+$") 能拦住 <script></script>,但拦不住 onerror=alert(1) 这种绕过正则的内联事件;
- @Size(max = 50) 对 admin'-- 或 1 or 1=1 完全无效。
而过滤器工作在 Servlet 层最前端,对所有 request.getParameter()、getParameterMap()、getInputStream() 等入口统一生效,不依赖 Controller 层是否加了注解。

黑名单词库要覆盖的关键攻击模式

词库不是简单列几个关键词,需按攻击类型分层设计:

  • XSS 相关:

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习