Java中如何修复sanitize逻辑无法拦截window对象类反射型XSS payload的问题
解决Servlet应用中无HTML标签的反射型XSS拦截问题
你的问题核心在于:之前的防护逻辑只针对HTML标签注入类的XSS,但忽略了JavaScript上下文注入的场景——这类payload不需要HTML标签,而是通过闭合变量、拼接代码的方式在JS环境中执行,所以单纯的HTML sanitize无法拦截。以下是具体解决思路:
1. 放弃"一刀切"的输入拦截,转向"场景化输出转义"
输入阶段的sanitize只能过滤已知的恶意标签,无法覆盖所有JS注入场景。更可靠的方式是在输出到不同上下文时做针对性转义,因为此时你明确知道输入会被放到哪里(HTML文本、HTML属性、JS代码、URL等):
- 输出到HTML文本节点:继续用Jsoup的HTML sanitize(
Jsoup.clean(input, Whitelist.basic())) - 输出到HTML属性(比如input的value、div的title):用ESAPI的
ESAPI.encoder().encodeForHTMLAttribute(input) - 输出到JavaScript代码块/事件属性(比如
相关产品推荐
相关产品推荐

