题
我正在尝试找到消毒的方法 WMD 编辑。
具体来说,我试图使HTML标签仅在 <code>
WMD生成的标签。那可能吗
我的问题是,以下代码呈现为HTML,这是潜在的 XSS攻击.
例如, <a onmouseover="alert(1)" href="#">read this!</a>
以上代码通常在预览模式下以及保存到数据库时呈现。
我注意到堆栈溢出似乎没有这个问题。相同的代码仅呈现为文本。
我注意到堆栈溢出团队已在 http://refactormycode.com/codes/333-sanitize-html. 。我真的必须使用C#来消毒WMD吗?
解决方案
我最终使用了 HTML净化器 为了这。
其他提示
如果您想在客户端的WMD中阻止坏脚本,请在此处查看我的答案:将WMD编辑器的预览与服务器端HTML验证对齐(例如无嵌入式JavaScript代码).
它显示了如何在WMD编辑器中实现客户端的白名单,以将WMD的Preview Pane HTML限制为已知的安全HTML元素和已知安全的HTML属性。它进行验证 后 WMD基于其HTML,因此,即使WMD编辑器的HTML生成中有一个错误,允许错误的脚本可以通过,但白名单封锁者也会抓住它。该代码基于Stackoverflow.com的实现相同的验证。
也就是说,您也需要服务器端验证(如果您使用的是PHP, HTML净化器 是一个不错的选择),因为即使您修复了客户端,也不能阻止攻击者通过将其邮寄到服务器来模拟浏览器并保存恶意赌注。因此,实际上不需要进行客户端WMD预览器验证,除了防御攻击者设法在服务器上妥协的Markdown的晦涩的情况,并说服站点主持人编辑页面。在这种情况下,客户端WMD预览器验证可能会阻止攻击者接管整个站点。
另外,执行客户端验证可能会有所帮助,因为您知道客户端允许的标签和HTML也将在服务器上允许。确保将服务器端白名单与客户端白名单同步。 Stackoverflow的白名单是 这里 如果您想要一个示例。