Javascript 中的简单 HTML 清理器

新手上路,请多包涵

我正在寻找用 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 许可协议

阅读 411
1 个回答

我们开发了一个简单的 HtmlSantizer 并在此处开源: https ://github.com/jitbit/HtmlSanitizer

用法

var result = HtmlSanitizer.SanitizeHtml(input);

[免责声明!我是作者之一!]

原文由 Alex from Jitbit 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题