如何避免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编码的语法
-
WebForms中的<%:model.something%>语法
-
它是在剃刀自动即@模型。自动编码自动不需要做任何事情来编码。
-
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
script:alert('hello');"> <img src="java
script:alert('hello');">
攻击者也可以使用标签通过更改MIMEtypes来注入脚本,如下所示。
<style TYPE="text/javascript"> alert('hello'); </style>