2009-01-15 96 views
9

假设我有一个简单的ASP.NET MVC博客应用程序,并且我想允许读者向博客文章添加评论。如果我想阻止任何类型的XSS恶意代码,我可以对所有注释进行HTML编码,以便在渲染时变得无害。但是,如果我想一些基本功能如超链接,粗体,斜体等?防止XSS(跨站点脚本)

我知道StackOverflow上使用WMD Markdown Editor,这似乎是一个伟大的选择。我想要去实现,如果不是事实,它支持 HTML和降价这leaves it open to XSS attacks

+1

对于搜索的原因,可能有助于改变其标题为“防止XSS(跨网站脚本)“的标题。对于不了解其友好名称的人,XSS,他们可能会很难找到这个线索。 – BuddyJoe 2009-01-15 01:01:57

回答

3

你打算支持多少HTML?大胆/斜体/基本的东西?在这种情况下,您可以将它们转换为markdown语法,然后剥去其余的HTML。

剥离需要在服务器端完成,然后再存储。在检查SQL漏洞和其他不需要的东西时,您还需要验证服务器上的输入。

+0

对。采取白名单方式 - 不是黑名单方式。 – 2009-01-15 00:17:58

1

我建议你只提交markdown语法。在前端,客户端可以输入markdown并有一个HTML预览(与SO相同),但只提交markdown语法服务器端。然后你可以验证它,生成HTML,转义并存储它。

我相信这是我们大多数人的做法。在任何一种情况下,减价都可以减轻任何人编写结构化HTML代码的权力,并为那些甚至不知道如何去做的人提供权力。

如果您想要对HTML做某些特定的处理,那么您可以使用一些CSS继承来调整它“.comment a {color:#F0F; }',前端JS或者只是在存储它之前从解析markdown遍历生成的HTML。

0

您可以使用HTML白名单,以便仍然可以使用某些标签,但其他所有内容都被阻止。

有些工具可以为您做到这一点。 SO使用the codeSlough linked