Java处理富文本中的XSS攻击
发布时间:2020-01-12 17:55:35阅读:(2228)
目前,web应用或多或少会用到富文本编辑器,这就很容易引起XSS攻击,这里介绍一种Java处理XSS攻击的工具类:Jsoup
目前最新版本maven坐标:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.12.1</version>
</dependency>
使用方法非常简单,只需一行代码:
String result=Jsoup.clean(source,Whitelist.basic());
第二个参数是白名单设置(白名单中定义了一些标签和标签属性,只要不在这个白名单中的标签和属性就会被删除,比如script标签,img标签的onerror属性等);
Jsoup内置了5中白名单 Whitelist.none(), simpleText(), basic(), basicWithImages(), relaxed(),具体可以在源码中查看每种白名单的定义。 当然,往往这几种白名单会不符合使用场景,如:这5中白名单中都没有配置class属性,也就是过滤完,所有的class都会丢失,这就需要我们自己配置白名单了,方法也很简单:
Whitelist whitelist = (new Whitelist())
.addTags("a", "b", "div", "img", "...") // 设置允许的标签
.addAttributes("a", "href", "title", "...") // 设置标签允许的属性
.addAttributes(":all", "class", "id", "...") // 通配符,对所有标签配置允许的属性
.addProtocols("img", "src", "http", "https") // 设置Protocol,这是代表img的src属性只允许http和https开头
也可以继承Jsoup默认的白名单,在此基础上添加属性:
Whitelist whitelist = Whitelist.basic()
.addTags("...")
.addAttributes("a", "href", "...")
Jsoup.clean 还有一个重载方法:
public static String clean(StringbodyHtml,StringbaseUri,Whitelist whitelist,Documeny.OutputSettings outputSettings)
OutputSettings可以设置输出文档的格式,主要有:
- prettyPrint: 是否重新格式化
- outline:是否强制所有标签换行
- indentAmount: 缩进长度
文章版权及转载声明:
文章转载或复制请以超链接形式并注明出处陌上小筑
发表评论
不错