2011-08-21 30 views
4

被Ruby on Rails(3)宠坏了,我希望我所有的HTML输出都能被自动编码。在ASP.NET中自动HtmlEncode

我问了这个question about script exploits更早一点,现在想知道,有没有一些ASP.NET的设置,插件或扩展,将自动导致所有的HTML为HtmlEncode'编辑或我必须非常小心,并确保我自己?

回答

4

各种ASP.NET控件都会自动使用HtmlEncode对HTML进行编码(还有一些使用UrlEncode进行URL编码),但它不是通用的。以下是控件列表以及它们自动执行的编码(如果有)。我不知道这是否对.NET 4.0或不更新:

Which ASP.NET Controls Automatically Encodes?(此链接会提示您保存文档)

这是上面的文件是从博客:

http://blogs.msdn.com/b/sfaust/archive/2008/09/02/which-asp-net-controls-automatically-encodes.aspx

它最初发布于2008年9月,因此它可能是2.0版本,但不一定是4.0。尽管如此,IMO仍然是一个有用的资源。

你也应该看看Microsoft Anti-Cross Site Scripting Library 3.1

正如balexandre指出,看来现在ANIT-XSS库是开源的Web防护库的一部分:

Microsoft Web Protection Library

而且,OWASP是安全信息的好资源,他们企业安全API项目(ESAPI)以各种编程语言提供(在不同程度上)。我相信.NET的一个并不完整。

OWASP Enterprise Security API

+0

@balexandre的HTMLEncode的userinput自己的服务器上,防XSS库是一个开源的举措,但不支持/认可我的M $? – Zabba

+0

据我所知,微软的Anti-XSS Library不是**开源的,但它肯定支持(我认为是由微软开发)。 – Tim

+0

我认为它是开源的,因为@balexandre在编辑你的答案时链接到[this](http://wpl.codeplex.com/) – Zabba

3

如果您使用ASP.NET 4.0 Web窗体,然后使用代码块<%: %>会自动的HTMLEncode输出。如果您使用Razor引擎,则默认情况下所有数据均为HtmlEncoded。

+0

Razor是否与WebForms或ASP.NET MVC一起使用? – Zabba

+0

Razor是一个引擎视图,不,你不能在Webforms上,持有...是的,你可以;)P​​LZ阅读 - > http://www.hanselman.com/blog/MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx – balexandre

1

默认情况下,ASP.Net将不接受Inputcontrol包含html元素的回传。此行为由属性ValidateRequest在页面级别设置。

如果你想接受含有HTML回传,你需要ValidateRequest设置为false,在进一步讨论之前

+0

有趣的知道,谢谢 – Zabba

+0

“需要”我的意思是“应该”。您可以禁用EnableEventValidation并接受包含html的回传并将其再次打印出来(例如在评论系统中)。所以ASP.Net不会阻止你这样做,但在这种情况下,最好在打印出来之前对用户输入进行HTM编码。 – citronas

+0

@citronas,您错误地引用了EnableEventValidation属性而不是ValidateRequest。 EnableEventValidation用于与ASP.NET在下拉列表或其他列表控件中回发时接受的值有关的一组不同的功能。我试图编辑你的答案是正确的,但它被拒绝了。 –