防止XSS(跨站点脚本)

时间:2009-01-15 00:11:32

标签: asp.net asp.net-mvc security xss

假设我有一个简单的ASP.NET MVC博客应用程序,我想允许读者在博客文章中添加评论。如果我想阻止任何类型的XSS恶作剧,我可以对所有注释进行HTML编码,以便在渲染时它们变得无害。但是,如果我想某些基本功能,如超链接,粗体,斜体等,该怎么办?

我知道StackOverflow使用WMD Markdown Editor,这似乎是我想要完成的一个很好的选择,如果不是因为它支持两者 HTML和Markdown leaves it open to XSS attacks

7 个答案:

答案 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