从HTML中删除将要显示的Javascript的最佳库/方法是什么?
例如,请:
<html><body><span onmousemove='doBadXss()'>test</span></body></html>
并离开:
<html><body><span>test</span></body></html>
我看到了DeXSS项目。但这是最好的方式吗?
答案 0 :(得分:11)
JSoup有一种基于白名单清理HTML的简单方法。 查看http://jsoup.org/cookbook/cleaning-html/whitelist-sanitizer
它使用白名单,这比DeXSS使用的黑名单方法更安全。从DeXSS页面:
DeXSS尚未检测到许多已知的XSS攻击。
黑名单只允许已知的不安全结构,而白名单只允许已知的安全结构。如此未知,可能不安全的结构只会受到白名单的保护。
答案 1 :(得分:1)
最简单的方法是首先没有那些......在自由格式字段中只允许使用非常简单的标记并禁止任何类型的属性可能是有意义的。
可能不是你想要的答案,但在很多情况下你只想提供标记功能,而不是完整的编辑套件。
同样,另一种更简单的方法是提供基于文本的语法,如Markdown,进行编辑。 (例如,你没有很多方法可以利用SO编辑区域.Markdown语法+没有属性的有限标签列表。)
答案 2 :(得分:1)
您可以尝试使用dom4j http://dom4j.sourceforge.net/dom4j-1.6.1/这是一个DOM解析器(与SAX相对),允许您轻松遍历和操作DOM,删除节点属性,例如onmouseover
(或整个元素,如<script>
),在写回或流式传输之前。根据你的html有多疯狂,你可能需要先清理它 - jtidy http://jtidy.sourceforge.net/很好。
但显然,如果你在页面渲染时这样做,那么所有这些都需要一些开销。