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

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

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

【问题讨论】:

    标签: java html parsing


    【解决方案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】:
      【解决方案4】:

      除了JTidy你还可以看看:
      Nekohtml
      TagSoup
      Getting text in HTmL document

      【讨论】:

        【解决方案5】:

        JTidy 可以帮到你。

        【讨论】:

        • 是的,idd,jTidy 帮帮我。感谢分享。
        猜你喜欢
        • 2010-12-22
        • 1970-01-01
        • 2011-02-02
        • 2011-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多