Java处理富文本中的XSS攻击

发布时间:2020-01-12 17:55:35阅读:(1979)

目前,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: 缩进长度
标签:xss

发表评论

评论列表(有1条评论1979人围观)
游客2023-09-15 17:57:05

不错