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

Java:从HTML中删除Javascript的最佳方法,java,javascript,xss,Java,Javascript,Xss,从将要显示的HTML中删除Javascript的最佳库/方法是什么 例如,以: <html><body><span onmousemove='doBadXss()'>test</span></body></html> 测试 然后离开: <html><body><span>test</span></body></html> 测试 我看到这个项目了。

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

例如,以:

<html><body><span onmousemove='doBadXss()'>test</span></body></html>
测试
然后离开:

<html><body><span>test</span></body></html>
测试

我看到这个项目了。但这是最好的方法吗?

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

可能不是您想要的答案,但在许多情况下,您只希望提供标记功能,而不是完整的编辑套件



类似地,另一种更简单的方法是提供基于文本的语法,如Markdown,用于编辑。(没有那么多方法可以利用SO编辑区域,例如,标记语法+不带属性的有限标记列表)。

JSoup有一种基于白名单清理HTML的简单方法。 检查

它使用白名单,比DeXSS使用的黑名单方法更安全。从DeXSS页面:

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

黑名单只允许已知的不安全结构,而白名单只允许已知的安全结构。因此,未知的、可能不安全的构造只会受到白名单的保护。

您可以尝试dom4j这是一个DOM解析器(与SAX相反),允许您轻松地遍历和操作DOM,例如删除节点属性,如
onmouseover
(或整个元素,如
),在写回或流到某个地方之前。根据html的狂野程度,您可能需要首先清理它-jtidy很好


但是,如果在页面呈现时执行这些操作,显然会带来一些开销。

最简单的方法可能是使用XSLT(编写一个样式表,复制允许的元素和属性),但这仅在文档是XHTML时有效(除非XSLT有HTML模式,我不记得是否有HTML模式)“IE”而不是“i.e.”把我弄糊涂了!@JasonFruit:哈哈!我也弄糊涂了。可能是