我正在寻找用 JavaScript 编写的简单 HTML 清理程序。它不需要 100% XSS 安全。
我正在我的网站上实施 Markdown 和 WMD Markdown 编辑器(来自 github 的 SO master 分支)。问题是实时预览中显示的 HTML 没有被过滤,就像它在 SO 上一样。我正在寻找一个用 JavaScript 编写的简单/快速的 HTML 清理器,以便我可以过滤预览窗口的内容。
不需要具有完整 XSS 保护的完整解析器。我不会将输出发送回服务器。在将结果存储在数据库中之前,我将 Markdown 发送到服务器,在那里我使用了适当的、完整的 HTML 清理器。
谷歌对我来说完全没用。我刚刚收到数百篇(通常是错误的)文章,内容是关于如何从用户生成的各种服务器端语言的 HTML 中过滤掉 javascript。
更新
我会更好地解释为什么我需要这个。我的网站有一个与 StackOverflow 上的编辑器非常相似的编辑器。有一个文本区域可以输入 MarkDown 语法,下面有一个预览窗口,可以显示提交后的效果。
当用户提交内容时,它会以 MarkDown 格式发送到服务器。服务器将其转换为 HTML,然后在其上运行 HTML 清理程序以清理 HTML。 MarkDown 允许任意 HTML,所以我需要清理它。例如,用户键入如下内容:
<script>alert('Boo!');</script>
MarkDown 转换器不会触及它,因为它是 HTML。 HTML 清理器会去除它,这样脚本元素就消失了。
但这不是预览窗口中发生的情况。预览窗口仅将 MarkDown 转换为 HTML,但不会对其进行清理。因此,预览窗口将有一个脚本元素。这意味着预览窗口与服务器上的实际呈现不同。
我想解决这个问题,所以我需要一个快速而简单的 JavaScript HTML 清理器。一些简单的基本元素/属性黑名单和白名单就可以了。它不需要 XSS 安全,因为 XSS 保护是由服务器端 HTML 消毒程序完成的。
这只是为了确保预览窗口在 99.99% 的时间内与实际渲染相匹配,这对我来说已经足够了。
你能帮我吗?提前致谢!
原文由 Sander Marechal 发布,翻译遵循 CC BY-SA 4.0 许可协议
我们开发了一个简单的 HtmlSantizer 并在此处开源: https ://github.com/jitbit/HtmlSanitizer
用法
[免责声明!我是作者之一!]