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

时间:2010-07-08 19:15:19

标签: asp.net asp.net-mvc xss

我最近注意到我的应用程序中有一个很大的漏洞,因为我做过类似的事情:

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

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

5 个答案:

答案 0 :(得分:22)

有几种方法:

  • 在ASP.NET MVC2 / .NET 4.0中使用<%: %>语法。 (这只是Html.Encode())的语法糖
  • 使用Anti-XSS库作为ASP.NET的“默认”编码引擎,按照指示laid out by Phil Haack的详细信息进行操作。

答案 1 :(得分:9)

观看Scott Hanselman和Phil Haack的video。它们涵盖了XSS,CSRF,JSON Hijacking,特别是ASP.Net MVC。

答案 2 :(得分:7)

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

Scott Gu's explanation

完成此操作后,作为安全预防措施,为&lt;%=定期grep您的代码非常简单。

另外,您使用的是Microsoft Anti-XSS library吗?

答案 3 :(得分:2)

HTML编码的语法

  1. &lt;%:model.something%&gt; WebForms中的语法

  2. 它在Razor中是自动的,即@ model.something会自动自动编码 需要做任何事情来编码。

  3. MVC3 HTML Helper方法自动返回编码的字符串。例如Html.Label将返回编码的字符串

  4. 有关跨站点脚本的更多信息

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

答案 4 :(得分:1)

可能危险的HTML标签:

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

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

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

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

攻击者还可以通过更改MIME类型来使用标记注入脚本,如下所示。

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