【发布时间】:2010-12-10 20:55:10
【问题描述】:
我正在寻找一个用 JavaScript 编写的简单的 HTML 清理程序。它不需要 100% XSS 安全。
我正在我的网站上实现 Markdown 和 WMD Markdown 编辑器(来自 github 的 SO 主分支)。问题是实时预览中显示的 HTML 没有被过滤,就像它在 SO 上一样。我正在寻找一种用 JavaScript 编写的简单/快速的 HTML sanitizer,以便我可以过滤预览窗口的内容。
不需要具有完整 XSS 保护的完整解析器。我没有将输出发送回服务器。在将结果存储到数据库之前,我将 Markdown 发送到使用适当的完整 HTML 清理程序的服务器。
Google 对我来说完全没用。我刚刚收到数百篇(通常不正确)关于如何从用户生成的各种服务器端语言的 HTML 中过滤掉 javascript 的文章。
更新
我会更好地解释为什么我需要这个。我的网站有一个与 StackOverflow 上的非常相似的编辑器。有一个输入 MarkDown 语法的文本区域和一个预览窗口,显示提交后的样子。
当用户提交内容时,它会以 MarkDown 格式发送到服务器。服务器将其转换为 HTML,然后在其上运行 HTML sanitizer 以清理 HTML。 MarkDown 允许任意 HTML,所以我需要清理它。例如,用户键入如下内容:
<script>alert('Boo!');</script>
MarkDown 转换器不会触及它,因为它是 HTML。 HTML sanitizer 将删除它,因此脚本元素消失了。
但这不是预览窗口中发生的情况。预览窗口仅将 MarkDown 转换为 HTML,但不会对其进行清理。因此,预览窗口会有一个脚本元素。这意味着预览窗口与服务器上的实际呈现不同。
我想解决这个问题,所以我需要一个快速又脏的 JavaScript HTML sanitizer。一些简单的基本元素/属性黑名单和白名单就可以了。它不需要是 XSS 安全的,因为 XSS 保护是由服务器端 HTML sanitizer 完成的。
这只是为了确保预览窗口在 99.99% 的时间与实际渲染相匹配,这对我来说已经足够了。
你能帮忙吗?提前致谢!
【问题讨论】:
-
FWIW,当预览与发布的内容不匹配时,我讨厌它。
-
@ms2ger:这就是我需要 HTML sanitizer 的原因,以便预览与服务器在后端执行的操作相匹配。
-
允许攻击者在您看不到他们的任何尝试的情况下在他们的浏览器中测试他们的攻击不是一个问题吗?
标签: javascript html wmd html-sanitizing