假设我有一个简单的ASP.NET MVC博客应用程序,并且我想允许读者向博客文章添加评论。如果我想阻止任何类型的XSS恶意代码,我可以对所有注释进行HTML编码,以便在渲染时变得无害。但是,如果我想一些基本功能如超链接,粗体,斜体等?防止XSS(跨站点脚本)
我知道StackOverflow上使用WMD Markdown Editor,这似乎是一个伟大的选择。我想要去实现,如果不是事实,它支持都 HTML和降价这leaves it open to XSS attacks。
假设我有一个简单的ASP.NET MVC博客应用程序,并且我想允许读者向博客文章添加评论。如果我想阻止任何类型的XSS恶意代码,我可以对所有注释进行HTML编码,以便在渲染时变得无害。但是,如果我想一些基本功能如超链接,粗体,斜体等?防止XSS(跨站点脚本)
我知道StackOverflow上使用WMD Markdown Editor,这似乎是一个伟大的选择。我想要去实现,如果不是事实,它支持都 HTML和降价这leaves it open to XSS attacks。
如果你不想使用编辑器,你可能会考虑OWASP's AntiSamy。
您可以运行在这里一个例子: http://www.antisamy.net/
你打算支持多少HTML?大胆/斜体/基本的东西?在这种情况下,您可以将它们转换为markdown语法,然后剥去其余的HTML。
剥离需要在服务器端完成,然后再存储。在检查SQL漏洞和其他不需要的东西时,您还需要验证服务器上的输入。
对。采取白名单方式 - 不是黑名单方式。 – 2009-01-15 00:17:58
我建议你只提交markdown语法。在前端,客户端可以输入markdown并有一个HTML预览(与SO相同),但只提交markdown语法服务器端。然后你可以验证它,生成HTML,转义并存储它。
我相信这是我们大多数人的做法。在任何一种情况下,减价都可以减轻任何人编写结构化HTML代码的权力,并为那些甚至不知道如何去做的人提供权力。
如果您想要对HTML做某些特定的处理,那么您可以使用一些CSS继承来调整它“.comment a {color:#F0F; }',前端JS或者只是在存储它之前从解析markdown遍历生成的HTML。
您可以使用HTML白名单,以便仍然可以使用某些标签,但其他所有内容都被阻止。
有些工具可以为您做到这一点。 SO使用the code即Slough linked。
我会为FCKEditor投票,但你必须做一些extra steps到返回的输出too。
你永远无法信任用户输入,来自浏览器的所有内容都可能被篡改 – rjlopes 2010-10-14 18:06:02
对于搜索的原因,可能有助于改变其标题为“防止XSS(跨网站脚本)“的标题。对于不了解其友好名称的人,XSS,他们可能会很难找到这个线索。 – BuddyJoe 2009-01-15 01:01:57