用于 HTML 清理的库

Posted

技术标签:

【中文标题】用于 HTML 清理的库【英文标题】:Libs for HTML sanitizing 【发布时间】:2010-12-29 03:43:35 【问题描述】:

我正在寻找一个 html sanitizer,我可以根据 API 调用它来清理从我的 webapp 获得的字符串。是否有一些有用的易于使用的库可用?有人知道一两个吗?

我不需要什么大的东西,它必须能够找到未关闭的标签并关闭它们。

【问题讨论】:

【参考方案1】:

https://github.com/OWASP/java-html-sanitizer 现在标记为可供生产使用。

用 Java 编写的快速且易于配置的 HTML Sanitizer,可让您在 Web 应用程序中包含由第三方创作的 HTML,同时防止 XSS。

你可以使用prepackaged policies

Sanitizers.FORMATTING.and(Sanitizers.LINKS)

或tests 展示如何轻松配置自己的:

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

或编写自定义策略来执行诸如将 h1s 更改为具有特定类的 divs 之类的事情:

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 干净。 我使用这个库,但它也删除了嵌入的 iframe。有什么方法可以添加 iframe,我有真正的用例,例如添加嵌入 youtube 视频或幻灯片演示文稿。我怎么能允许这样的嵌入式 iframe? @usero1,是的,你可以allowElements("iframe") 非常感谢迈克!但输入 html 就像: &lt;div class="embeddedContent" data-resizetype="noresize" data-align="none" data-oembed="http://www.youtube.com/watch?v=fC5N2EPCesk"&gt;&lt;iframe src="//www.youtube.com/embed/fC5N2EPCesk?wmode=transparent&amp;amp;jqoemcache=paWu1" width="425" height="349" allowfullscreen="true" allowscriptaccess="always" scrolling="no" frameborder="0"&gt;&lt;/iframe&gt;&lt;/div&gt; & 在经过净化的输出中,我将所有属性都删除了。如何防止属性被剥离?顺便说一句,允许具有所有这些属性的 iframe 是否安全? @user01,您可能必须允许 src 属性具有您认可的值。请参阅 HTML 策略构建器类的文档。【参考方案2】:

HTML 解析器 JSoup 还支持按策略清理:http://jsoup.org/cookbook/cleaning-html/whitelist-sanitizer

【讨论】:

【参考方案3】:

http://roberto.open-lab.com/2009/11/05/a-java-html-sanitizer-also-against-xss/

【讨论】:

【参考方案4】:

除了JTidy你还可以看看:NekohtmlTagSoupGetting text in HTmL document

【讨论】:

【参考方案5】:

JTidy 可以帮到你。

【讨论】:

是的,idd,jTidy 帮帮我。感谢分享。

以上是关于用于 HTML 清理的库的主要内容,如果未能解决你的问题,请参考以下文章

html 用于新BB重新设计的滑块(稍后清理)

清理丑陋的所见即所得 HTML 代码? Python 或 *nix 实用程序

我应该清理降价吗?

用于清理 HTML 的 Java 库,就像浏览器一样

mysql单表备份和恢复

Rails 4:使用内置 HTML 清理时禁用自动 CSS 清理