服务器处理富文本编辑器提交的内容时, 因排版的需求不能对 HTML 标签进行转义, 但为了防止 XSS 攻击, 又必须过滤掉其中的 JS 代码, 在 Java 中使用 Jsoup 正好可以满足此要求
实现原理
Jsoup 使用标签 ** 白名单 ** 的机制用来进行防止 XSS 攻击, 假设白名单中只允许 p 标签存在, 此时在一段 HTML 代码中,** 只能存在 p 标签 **, 其他标签将会被清除只保留被标签所包裹的内容, 具体详情可查看参考资料
项目依赖
jsoup-1.9.2
org.jsoup
jsoup
1.9.2
代码示例
创建进行测试的 HTML 代码
String testHtml = "
p 标签的内容
";创建一个白名单对象
Whitelist whitelist = new Whitelist();
添加允许使用的标签, 此时只允许 p 标签存在
whitelist.addTags("p");
对测试代码进行过滤, 过滤规则就是创建的白名单
String result1 = Jsoup.clean(testHtml, whitelist);
System.out.println(result1);// 输出: div 标签的内容 < p>p 标签的内容
此时我们发现 div 标签已经被过滤掉了, 但是 p 标签中的属性也同时也被过滤掉了, 因为白名单只允许了 p 标签, 但是并未对属性加入白名单, 此时将 p 标签中的 class 属性加入白名单中, 再进行一次过滤
whitelist.addAttri