代码之家  ›  专栏  ›  技术社区  ›  tghw megawac

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

  •  19
  • tghw megawac  · 技术社区  · 14 年前

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

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

    我知道我应该用 Html.Encode ,但是否有任何方法可以为所有值执行此操作,而不必显式执行此操作?

    5 回复  |  直到 9 年前
        1
  •  22
  •   George Stocker NotMe    14 年前

    有几种方法:

    • 使用 <%: %> ASP.NET MVC2/.NET 4.0中的语法。(这只是句法上的糖分 Html.Encode() )
    • 遵循指示 laid out by Phil Haack 其中详细说明了如何使用反XSS库作为ASP.NET的“默认”编码引擎。
        2
  •  9
  •   Simon    11 年前

    看这个 video 来自斯科特·汉塞尔曼和菲尔·哈克。它们包括XSS、CSRF、JSON劫持,特别是使用ASP.NET MVC。

        3
  •  7
  •   sven    14 年前

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

    Scott Gu's explanation .

    这样做之后,作为安全预防措施,定期对代码进行grep<%=是相当简单的。

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

        4
  •  2
  •   Thiru    11 年前

    HTML编码语法

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

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

    3. MVC3 HTML助手方法自动返回编码字符串。例如,html.label将返回编码字符串

    有关跨站点脚本的详细信息

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

        5
  •  1
  •   Brad Larson SHIDHIN TS    9 年前

    潜在危险的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');">
    

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

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