HTML清理的库

15

我正在寻找一个 HTML 清理器,我可以通过 API 调用来清理从我的 Web 应用程序获取的字符串。是否有一些有用且易于使用的库可用?也许有人知道一个或两个吗?

我不需要很大的东西,它只需要能够找到未关闭的标签并将其关闭。

5个回答

25

https://github.com/OWASP/java-html-sanitizer目前已经被标记为可用于生产环境。

这是一个快速且易于配置的Java HTML清理程序,可以让您在Web应用程序中包含由第三方编写的HTML,并同时保护您免受XSS攻击。

您可以使用预打包策略

Sanitizers.FORMATTING.and(Sanitizers.LINKS)

或者测试展示了如何轻松地配置自己的。

new HtmlPolicyBuilder()
    .allowElements("a")
    .allowUrlProtocols("https")
    .allowAttributes("href").onElements("a")
    .requireRelNofollowOnLinks()

或编写自定义策略来完成像将 h1 更改为带有特定类的 div 这样的事情:

new HtmlPolicyBuilder()
    .allowElements("h1", "p")
    .allowElements(
        new ElementPolicy() {
          public String apply(String elementName, List<String> attrs) {
            attrs.add("class");
            attrs.add("header-" + elementName);
            return "div";
          }
        }, "h1"))

这个库给人留下了良好的第一印象:文档完备,API简洁明了。 - Sven Jacobs
我使用这个库,但它也会移除嵌入的 iframe。有没有办法允许添加 iframes,我有真正的用例,比如嵌入 YouTube 视频或 Slideshare 演示文稿。我该如何允许这样的嵌入式 iframes? - Rajat Gupta
1
@usero1,是的,你可以使用allowElements("iframe") - Mike Samuel
非常感谢你,Mike!但输入的HTML代码是这样的:*<div class="embeddedContent" data-resizetype="noresize" data-align="none" data-oembed="http://www.youtube.com/watch?v=fC5N2EPCesk"><iframe src="//www.youtube.com/embed/fC5N2EPCesk?wmode=transparent&amp;jqoemcache=paWu1" width="425" height="349" allowfullscreen="true" allowscriptaccess="always" scrolling="no" frameborder="0"></iframe></div>*,在经过处理后输出的结果中,所有属性都被剥离了。我该如何防止属性被剥离?顺便问一下,使用带有这些属性的iframe是否安全? - Rajat Gupta
我得到的针对上述输入的经过净化的输出是:*<div><iframe></iframe></div>*,这没有用处...谢谢! - Rajat Gupta
1
@user01,您可能需要允许具有您批准的值的src属性。请参阅HTML策略构建器类的文档。 - Mike Samuel

10

JTidy 可能会对你有所帮助。


是的,jTidy在这里帮了我。感谢分享。 - onigunn

3

2


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接