假设我有一个简单的ASP.NET MVC博客应用程序,我想允许读者在博客文章中添加评论。如果我想阻止任何类型的XSS恶作剧,我可以对所有注释进行HTML编码,以便在渲染时它们变得无害。但是,如果我想某些基本功能,如超链接,粗体,斜体等,该怎么办?
我知道StackOverflow使用WMD Markdown Editor,这似乎是我想要完成的一个很好的选择,如果不是因为它支持两者 HTML和Markdown leaves it open to XSS attacks
答案 0 :(得分:8)
如果您不想使用编辑器,可以考虑使用OWASP's AntiSamy。
您可以在此处运行示例: http://www.antisamy.net/
答案 1 :(得分:3)
你要支持多少HTML?只是粗体/斜体/基本的东西?在这种情况下,您可以将这些转换为markdown语法,然后删除HTML的其余部分。
在存储之前,需要在服务器端完成剥离。在检查SQL漏洞和其他不需要的东西时,您还需要验证服务器上的输入。
答案 2 :(得分:2)
如果您需要在浏览器中执行此操作:http://code.google.com/p/google-caja/wiki/JsHtmlSanitizer
答案 3 :(得分:1)
我建议您只提交降价语法。在前端,客户端可以键入markdown并具有HTML预览(与SO相同),但仅提交服务器端的markdown语法。然后你可以验证它,生成HTML,转义它并存储它。
我相信这就是我们大多数人这样做的方式。在任何一种情况下,降价都可以减轻任何人编写结构化HTML代码并为那些甚至不知道如何操作的人提供帮助。
如果你想对HTML做一些具体的事情,那么你可以用一些CSS继承来调整它.comment a {color:#F0F; }',前端JS或者只是在存储它之前遍历解析markdown生成的HTML。
答案 4 :(得分:1)
你为什么不使用杰夫的代码? http://refactormycode.com/codes/333-sanitize-html
答案 5 :(得分:1)
我投票支持FCKEditor,但您必须对返回的输出extra steps执行一些too。
答案 6 :(得分:0)
您可以使用HTML白名单,以便仍然可以使用某些标记,但其他所有标记都会被阻止。
有些工具可以帮到你。因此the code使用Slough linked。