Java:从HTML中删除Javascript的最佳方法

9

什么是从将被显示的HTML中删除Javascript的最佳库/方法?

例如,考虑以下内容:

<html><body><span onmousemove='doBadXss()'>test</span></body></html>

并离开:

<html><body><span>test</span></body></html>

我了解了DeXSS项目。但是,这是否是最好的选择呢?


可能最简单的方法是使用XSLT(编写一个复制允许元素和属性的样式表),但这仅适用于您的文档是XHTML(除非XSLT有一个HTML模式 - 我不记得是否有)。 - C. K. Young
2
你写成了“IE”而不是“i.e.”,让我非常困惑! - JasonFruit
@JasonFruit:哈哈!我也感到困惑了。 - Rakesh Juyal
3个回答

11

JSoup有一种基于白名单的简单方法来清理HTML。请查看http://jsoup.org/cookbook/cleaning-html/whitelist-sanitizer

它使用白名单,这比DeXSS采用的黑名单方法更安全。从DeXSS页面上可以看到:

仍然有许多已知的XSS攻击DeXSS尚未检测到。

黑名单只禁止已知的不安全结构,而白名单只允许已知的安全结构。因此,未知的、可能不安全的结构只能通过白名单来对其进行保护。


1

最简单的方法是一开始就不要有这些... 在自由格式字段中,允许使用非常简单的标记,并禁止任何类型的属性可能是有意义的。

也许这不是你想要的答案,但在许多情况下,你只想提供标记功能,而不是完整的编辑套件。


同样,另一种更简单的方法是提供基于文本的语法(如Markdown)进行编辑。(例如,SO编辑区域可以利用的方式并不多。Markdown语法+有限的标签列表而没有属性)。

1

你可以尝试使用dom4j http://dom4j.sourceforge.net/dom4j-1.6.1/ 这是一个DOM解析器(与SAX相对),它允许你轻松遍历和操作DOM,在写回或流向其他地方之前,删除节点属性,例如onmouseover(或整个元素,如<script>)。根据你的HTML有多复杂,你可能需要先清理一下 - jtidy http://jtidy.sourceforge.net/ 是个不错的选择。

但显然,如果你在页面渲染时进行所有这些操作,会增加一些开销。


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