spring mvc中拦截xss攻击的核心是通过xssfilter和xsshttpservletrequestwrapper在请求进入controller前统一过滤用户输入,重写getparameter等方法并调用htmlutils.htmlescape()转义,配合排除规则(如multipart/form-data、get/delete请求)和antisamy富文本净化,实现可配置、低侵入的防护。

Spring MVC 中拦截并过滤 XSS 攻击,核心是在请求进入 Controller 之前,对用户输入的 HTML/JS 片段做预处理。不依赖前端信任,也不靠每个接口手动清洗,而是通过统一、可配置的过滤机制实现防护。
用 Filter 包装 HttpServletRequest
这是最常用且稳定的方式:自定义一个 XssHttpServletRequestWrapper,重写 getParameter、getParameterValues、getHeader 等方法,在返回参数前自动转义或过滤敏感内容。
- 创建包装类,对字符串类型参数调用
HtmlUtils.htmlEscape()或StringEscapeUtils.escapeHtml4() - 编写
XssFilter,在doFilter中将原始 request 替换为包装后的实例 - 在
web.xml或使用@WebFilter注解注册该 Filter,路径匹配/* - 注意跳过文件上传(
multipart/form-data)和静态资源,避免破坏二进制数据
按 HTTP 方法或 URL 排除特定接口
不是所有接口都需要过滤——富文本编辑器提交的 HTML 内容要保留标签结构,只清理危险部分;而普通表单字段则需严格转义。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 在 Filter 初始化时读取配置项(如
excludes=/api/content/save,/actuator/**) - 在
doFilter中解析当前请求路径和 method,匹配排除规则 - 常见策略:GET/HEAD/DELETE 请求默认放行;POST/PUT/PATCH 才执行过滤
- 也可结合白名单策略,仅对指定路径启用过滤,减少误伤
配合 AntiSamy 实现富文本安全净化
当业务允许用户提交带格式的 HTML(如公告、文章),简单转义会破坏排版。此时应引入 OWASP AntiSamy,基于策略文件保留合法标签与属性。
- Maven 引入
antisamy依赖,并准备策略文件(如antisamy-simplified.xml) - 在 Filter 或自定义
RequestBodyAdvice中,对含 HTML 的字段调用AntiSamy.scan() - 策略中明确允许
p、strong、img[src]等,禁止script、onerror、javascript:等 - 失败时抛异常或静默截断,避免脏数据入库
Controller 层补充校验与输出转义
Filter 是第一道防线,但不能替代输出环节的防护。后端渲染模板或返回 JSON 时,仍需确保内容不会被浏览器执行。
- Thymeleaf 模板中默认启用 HTML 转义,使用
th:text而非th:utext - 返回 JSON 时,若字段含用户输入的 HTML,建议在序列化前再次调用
HtmlUtils.htmlEscape() - 对已存储的富文本内容,前端展示前也应使用 DOMPurify 等库二次清理,形成前后端双保险
- 避免在 JS 中拼接不可信内容,如
innerHTML = data.content,改用textContent或安全渲染方案










