如何通过OWASP Java HTML Sanitizer允许带样式的<span>和<div>?
解决OWASP Java HTML Sanitizer中allowStyling()导致失效的问题
你的问题出在allowWithoutAttributes("span")和allowStyling()的配置冲突上:
allowWithoutAttributes("span")强制要求元素不能携带任何属性,否则会被过滤allowStyling()会为所有已允许的元素开启style属性支持,这就导致因为带有style属性而触发过滤规则被移除
要实现全局允许样式且保留元素,只需调整配置:
- 移除
allowWithoutAttributes("span")——默认情况下,允许的元素无论是否带属性(只要属性被允许)都会被保留 - 保留
allowStyling()来全局开启所有已允许元素的style属性支持,无需逐个元素手动配置
调整后的代码:
private static final PolicyFactory POLICY_DEFINITION = new HtmlPolicyBuilder() .allowElements("span") // 如果需要支持其他元素(比如p、div),直接添加到allowElements中即可 // .allowElements("span", "p", "div") .allowStyling() .toFactory();
这样配置后:
- 带style属性的会被正常保留
- 无属性的也能正常通过过滤
- 所有后续添加到
allowElements中的元素,都会自动支持style属性,无需重复配置
内容的提问来源于stack exchange,提问作者Stephane Grenier
相关产品推荐
相关产品推荐

