【问题标题】:WMD editor sanitizing大规模杀伤性武器编辑器消毒
【发布时间】:2011-02-16 06:26:18
【问题描述】:

我正在设法清理WMD 编辑器的输入。

具体来说,我正在尝试使 HTML 标记仅在 WMD 生成的 <code>tags 中可用。有可能吗

我的问题是以下代码被呈现为 HTML,这对潜在的XSS attacks 来说是易受攻击的。

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

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

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

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

【问题讨论】:

  • 没人能回答我的问题吗?以前没有人这样做过?

标签: editor wmd


【解决方案1】:

我最终为此使用了HTML Purifier

【讨论】:

    【解决方案2】:

    如果您想在客户端阻止来自 WMD 的不良脚本,请在此处查看我的回答: Align the WMD editor's preview HTML with server-side HTML validation (e.g. no embedded JavaScript code)

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-10
      • 2016-09-21
      • 2010-11-18
      • 2010-12-30
      • 2010-12-10
      • 2023-03-19
      • 1970-01-01
      • 2011-07-28
      • 2010-12-04
      相关资源
      最近更新 更多