【问题标题】:ASP.NET MVC protected members area with sensitive data in URLsASP.NET MVC 受保护的成员区域,在 URL 中包含敏感数据
【发布时间】:2009-08-15 16:21:36
【问题描述】:

假设一个 ASP.NET MVc 应用程序有一个受保护的成员区域。生成的某些 URL 包含敏感数据,例如 Accounts/123,123 是敏感数据,例如帐号。如果用户机器后来被入侵,攻击者无法访问 Accounts/123,因为这将受到保护,但我们仅通过查看他们的浏览器历史记录就获得了用户的帐号。我认为避免这种情况的唯一方法是即使在受保护的区域也不在 URL 中使用敏感数据。

我在考虑敏感数据是用于索引、详细信息、编辑的 ID 的场景。解决方案可能是在表中添加另一个字段来表示敏感数据,这意味着如果受到损害但可以使用在网址中。

或者还有其他方法吗?

【问题讨论】:

    标签: asp.net-mvc security


    【解决方案1】:

    我会说不要在 URL 中使用敏感数据,并将帐号存储在用户会话中(如果假设有多个帐号,则只保留当前的)。

    编辑


    看到您的编辑后:

    如果您真的想要一种安全的方法来解决此问题,而客户不知道页面的 URL 有任何想法,请考虑这种情况。

    • 用户有多个帐户
    • 页面上列出了帐户
    • 帐户“ID”使用当前会话 ID 加密
    • 用户单击该链接,它会将他带到链接 /Account/10912ljlkj2308s

    现在您的帐户 ID 不再可见,加密密钥仅适用于该会话和该 ID。授予的会话 ID 可能并不总是唯一的,但这对于历史/缓存中的“查看者”来说将是一个巨大的威慑。

    【讨论】:

    • 你将如何加密、解密 ID?
    • 任何加密都有效,但 url 必须对 mvc 是“友好的”。 HtmlEncode 不起作用,因为它允许使用“/”。
    【解决方案2】:

    不要使用 HTTP GET 请求敏感数据。请改用 HTTP POST。确保将[AcceptVerbs(HttpVerbs.Post)] 放在您的 ActionResult 上。

    类似地,不要使用 HTTP GET 来获取您将在 AJAX 请求中使用的数据,有一个 subtle JSON vulnerability

    【讨论】:

      【解决方案3】:

      我遇到了类似的问题...仍在考虑最佳解决方案...但已实施 Tom 的解决方案。一个附带问题是 url 对于 mvc 必须是“友好的”。 HtmlEncode 不起作用,因为它允许 /'s。 Base64 使用以下辅助方法:

      public static string Base64ToUrlFriendlyBase64(string value)
      {
          return value.Replace("/", "_").Replace("+", "-");
      }
      
      public static string UrlFriendlyBase64ToBase64(string value)
      {
          return value.Replace("_", "/").Replace("-", "+");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-25
        • 1970-01-01
        • 2011-03-14
        • 2011-05-25
        • 1970-01-01
        • 2014-07-14
        • 1970-01-01
        相关资源
        最近更新 更多