我正在尝试寻找方法来清理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才能做到这点吗?
发布于 2010-05-08 22:24:13
为此,我最终使用了HTML Purifier。
发布于 2010-05-15 11:10:27
如果你想在客户端阻止来自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生成中有一个bug,允许恶意脚本通过,白名单拦截器也会捕捉到它。这段代码基于stackoverflow.com对相同验证的实现。
也就是说,您还需要服务器端验证(如果您正在使用PHP,HTML Purifier是一个很好的选择),因为即使您修复了客户端,也无法阻止攻击者模拟浏览器并通过将其发送到您的服务器来保存恶意标记。所以做客户端的WMD预览器验证实际上并不是必需的,除非是为了防止一个模糊的情况,即攻击者设法在服务器上获得泄露的标记,并说服站点版主编辑页面。在这种情况下,客户端WMD预览器验证可能会阻止攻击者接管整个站点。
此外,进行客户端验证也很有帮助,因为这样您就知道客户端允许的相同标记和HTML也将被允许在服务器上使用。请确保服务器端白名单与客户端白名单同步。StackOverflow的白名单是here,如果你需要一个例子的话。
https://stackoverflow.com/questions/2779053
复制相似问题