我正在尝试找到清理WMD编辑器输入的方法。
具体来说,我试图让HTML标签仅在WMD生成的<code>
标签中可用。这可能吗
我的问题是以下代码呈现为HTML,可能会对潜在的XSS attacks产生影响。
例如,<a onmouseover="alert(1)" href="#">read this!</a>
以上代码通常在预览模式和保存到数据库时呈现。
我注意到Stack Overflow似乎没有这个问题。相同的代码只是呈现为文本。
我注意到Stack Overflow团队已经在http://refactormycode.com/codes/333-sanitize-html中共享了他们的代码。我真的必须使用C#来消毒WMD吗?
答案 0 :(得分:3)
我最终使用了HTML Purifier。
答案 1 :(得分:1)
如果你想在客户端阻止来自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预览器验证可能会阻止攻击者接管整个站点。
此外,进行客户端验证可能会有所帮助,因为您知道服务器上也允许客户端允许使用相同的标记和HTML。确保将服务器端白名单与客户端白名单同步。如果你想要一个例子,StackOverflow的白名单是here。