5

我正在尝试寻找清理WMD编辑器输入的方法。

具体来说,我试图使 HTML 标签仅在<code>WMD 生成的标签中可用。那可能吗

我的问题是以下代码呈现为 HTML,这对潜在的XSS 攻击很有效。

例如,<a onmouseover="alert(1)" href="#">read this!</a>

上面的代码在预览模式和保存到数据库时都正常呈现。

我注意到 Stack Overflow 似乎没有这个问题。相同的代码只是呈现为文本。

我注意到 Stack Overflow 团队在http://refactormycode.com/codes/333-sanitize-html中分享了他们的代码。我真的必须使用 C# 来清理 WMD 才能做到这一点吗?

4

2 回答 2

3

我最终为此使用了HTML Purifier

于 2010-05-08T14:24:13.277 回答
1

如果您想在客户端阻止来自 WMD 的不良脚本,请在此处查看我的答案: 将 WMD 编辑器的预览 HTML 与服务器端 HTML 验证对齐(例如,没有嵌入的 JavaScript 代码)

它展示了如何在 WMD 编辑器中实现客户端白名单,以将 WMD 的预览窗格 HTML 限制为已知安全的 HTML 元素和已知安全的 HTML 属性。它在 WMD 生成其 HTML之后进行验证,因此即使 WMD 编辑器的 HTML 生成中存在允许错误脚本通过的错误,白名单阻止程序也会捕获它。此代码基于 StackOverflow.com 的相同验证实现。

也就是说,您还需要服务器端验证(如果您使用的是 PHP,HTML Purifier是一个不错的选择),因为即使您修复了客户端,也无法阻止攻击者模拟浏览器并保存恶意降价通过将其发布到您的服务器。因此,实际上并不需要进行客户端 WMD 预览器验证,除非是为了防止攻击者设法在服务器上获得受损的 markdown 并说服站点管理员编辑页面的晦涩案例。在这种情况下,客户端 WMD 预览器验证可能会阻止攻击者接管整个站点。

此外,进行客户端验证可能会有所帮助,因为这样您就知道客户端允许的相同标签和 HTML 也将在服务器上被允许。确保将服务器端白名单与客户端白名单同步。如果你想要一个例子,StackOverflow 的白名单就在这里。

于 2010-05-15T03:10:26.503 回答