用于 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()
或编写自定义策略来执行诸如将 h1
s 更改为具有特定类的 div
s 之类的事情:
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 就像: <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 是否安全?
@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 清理的库的主要内容,如果未能解决你的问题,请参考以下文章