如何避免ASP.Net(MVC)中的XSS漏洞?

我最近注意到我的应用程序有一个大的漏洞,因为我做了如下的事情:

<input type="text" value="<%= value%>" /> 

我知道我应该使用Html.Encode ,但有没有办法做到这一点,所有的价值,而不必明确地做到这一点?

有几种方法:

  • 使用ASP.NET MVC2 / .NET 4.0中的<%: %>语法。 (这只是Html.Encode()语法糖)
  • 按照Phil Haack所述的方向,使用Anti-XSS库作为ASP.NET的“默认”编码引擎。

观看Scott Hanselman和Phil Haack的video 。 它们涵盖了XSS,CSRF,JSON劫持具体与ASP.Net MVC。

在ASP.Net 4.0或更高版本中,始终使用<%:…%>而不是<%= …%> …它为您编写HTML编码。

斯科特·古的解释 。

完成这个操作后,为了安全起见,定期对<%=>进行grep代码是非常简单的。

另外,您是否使用Microsoft Anti-XSS库 ?

HTML编码的语法

  1. WebForms中的<%:model.something%>语法

  2. 它是在剃刀自动即@模型。自动编码自动不需要做任何事情来编码。

  3. MVC3 HTML帮助器方法自动返回编码的string。 例如Html.Label将返回编码的string

更多关于跨站点脚本

http://thirum.wordpress.com/2013/10/24/how-asp-net-mvc-prevents-cross-site-scriptingxss-attack/

潜在危险的HTML标签:

虽然不是一个详尽的列表,但以下常用的HTML标记可能允许恶意用户注入脚本代码:

 <applet> <body> <embed> <frame> <script> <frameset> <html> <iframe> <img> <style> <layer> <link> <ilayer> <meta> <object> 

攻击者可以使用诸如src,lowsrc,style和href之类的HTML属性与前面的标记一起注入跨站脚本。 例如,标记的src属性可以是注入源,如以下示例所示。

 <img src="javascript:alert('hello');"> <img src="java&#010;script:alert('hello');"> <img src="java&#X0A;script:alert('hello');"> 

攻击者也可以使用标签通过更改MIMEtypes来注入脚本,如下所示。

 <style TYPE="text/javascript"> alert('hello'); </style>