问题产生背景
主要是公司内部使用富文本编辑器 编辑一些文本内容 中间会引用道html文件 需要后端加对当前这个文本记录的对象做一些校验
解决方式
使用 https://github.com/nahsra/antisamy 可参考github的使用说明
笔者的公司使用的maven的依赖
具体的实现方式
第一步 引入依赖

        <dependency>
            <groupId>org.owasp.antisamy</groupId>
            <artifactId>antisamy</artifactId>
            <version>LATEST_VERSION</version>
        </dependency>

第二步 选择相关的策略
很有可能您站点的 AntiSamy 用例至少与预定义的策略文件之一大致相当。它们各自代表一个“典型”场景,允许用户提供 HTML(可能还有 CSS)格式信息。让我们看看不同的策略文件:
antisamy-slashdot.xml
Slashdot 是一个技术新闻网站,允许用户匿名回复带有非常有限的 HTML 标记的新闻帖子。现在,Slashdot 不仅是最酷的站点之一,而且还是遭受过许多不同成功攻击的站点。Slashdot 的规则相当严格:用户只能提交以下 HTML 标签,不能提交 CSS:, , , ,

因此,我们构建了一个允许相当相似功能的策略文件。允许直接作用于字体、颜色或强调的所有文本格式标签。

    antisamy-ebay.xml

据我所知,eBay 是世界上最受欢迎的在线拍卖网站。它是一个公共站点,因此任何人都可以发布具有丰富 HTML 内容的列表。考虑到 eBay 作为目标的吸引力,它遭受了一些复杂的 XSS 攻击也就不足为奇了。列表可以包含比 Slashdot 更丰富的内容——因此它的攻击面要大得多。

    antisamy-myspace.xml

在这个项目诞生时,MySpace 是最受欢迎的社交网站。用户可以提交几乎所有他们想要的 HTML 和 CSS——只要它不包含 JavaScript。MySpace 使用单词黑名单来验证用户的 HTML,这就是他们受到臭名昭著的 Samy 蠕虫攻击的原因。Samy 蠕虫,它使用碎片攻击结合一个应该被列入黑名单(eval)的词——是这个项目的灵感来源。

   antisamy-anythinggoes.xml

我不知道此策略文件的可能用例。如果您想允许每个有效的 HTML 和 CSS 元素(但没有 JavaScript 或与 CSS 相关的公然网络钓鱼攻击),您可以使用此策略文件。甚至 MySpace 也没有这么疯狂。但是,它确实可以作为一个很好的参考,因为它包含每个元素的基本规则,因此您可以在使用定制其他策略文件时将其用作知识库。
第三步 调用 AntiSamy API
使用 AntiSamy 很容易。以下是使用策略文件调用 AntiSamy 的示例:

   public static String sanitizeHtml(String sourceStr) {
        Resource resource = resourceLoader.getResource("classpath:/antisamy-anythinggoes.xml");
        String targetStr = "";
        String xmlPath;
        try {
            xmlPath = resource.getURL().getPath();
            Policy policy = Policy.getInstance(xmlPath);
            AntiSamy as = new AntiSamy();
            CleanResults cr = as.scan(sourceStr, policy);
            targetStr = cr.getCleanHTML();
        } catch (Exception e) {
            log.error(" sanitize html output error,the error is: {}", e);
        }
        return targetStr;
    }