【问题标题】:Security for ASP.NET Diagnostics pageASP.NET 诊断页面的安全性
【发布时间】:2010-05-06 00:42:02
【问题描述】:

我正在考虑为 ASP.NET 应用程序创建一个诊断页面,该页面主要供管理员使用,以获取有关该应用程序的更多信息以诊断问题。

页面可能包含的信息示例:

  • System.Environment.MachineName(可能在网络场场景中有用)
  • System.Environment.Version
  • Environment.UserName
  • 数据库名称
  • 当前用户的会话 ID

从安全角度来看,此页面上的某些信息可能是敏感信息。 如果你以前做过这种页面,你在访问这个页面时设置了什么样的安全措施? .

编辑:

我应该补充一下 - 有时在以特定(即真实)最终用户身份登录时查看此页面可能会很有用。例如说问题只能在以特定用户身份登录时重现。能够查看该用户的诊断页面可能很有用。例如知道当前会话 ID 可能有助于调试。

编辑 2:

我开始认为这个诊断页面实际上应该是两个不同的页面。一个显示对所有用户都相同的内容(例如数据库名称、CLR 版本),另一个显示可能因会话而异的内容(例如浏览器信息、会话 ID)。 然后您可以为第一页锁定更多安全性。

【问题讨论】:

    标签: asp.net security diagnostics


    【解决方案1】:

    是的,我以前添加过这种页面(并且发现它很有用)。安全性非常简单:该页面包含一个密码表单。服务器端代码根据配置值检查此密码,如果正确,则显示真实内容并在用户会话中设置一个值,表示他们已通过开发人员身份验证,因此下次不会再次提示他们时间。

    我想隐蔽性也有一点安全性,因为页面的 URL 没有在任何地方发布。

    我还小心翼翼地不在页面上透露任何真正敏感的内容。例如,它允许查看我们的应用程序配置值,但屏蔽了任何带有“密码”的内容 - 嘿,如果我们真的想查看密码,我们可以打开与服务器的远程桌面会话。

    【讨论】:

      【解决方案2】:

      还有其他几种方法可以做到这一点:

      • 如果您的 Web 应用程序具有用户身份验证,请通过检查用户是否被标记为管理员或属于某种管理员角色来限制对该页面的访问。

      • 使用简单的if (Request.IsLocal) ... 类型检查,尽管这样做的缺点是您仍然必须连接到服务器并在本地浏览网站——这可能并不总是可行的。但是,这仍然具有能够轻松查看关键系统设置的好处。

      就个人而言,我使用了两种方法的组合,其中本地请求始终允许访问,而非本地请求需要管理员用户 - 例如。 if (!Request.IsLocal && !IsAdminUser()) throw new SecurityException().

      另外,我同意 Evgeny - 注意不要在此页面上透露任何真正敏感的内容(例如应用程序连接字符串或密码)。

      【讨论】:

        【解决方案3】:

        使用表单身份验证并设置一两个可以访问该页面的用户。这样,您就可以在站点部署后更改密码并撤销访问权限。

        【讨论】:

          【解决方案4】:

          听起来您希望为错误页面提供强大的解决方案。我会看看像 Elmah (http://code.google.com/p/elmah/) 这样的开源项目,这是一个包含可配置安全性的健壮错误页面的好例子。为了给你一个想法,这里有一个关于配置 Elmah 的post,它将引导你完成安全设置。我测试的安全性允许我使用我的域凭据登录。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-28
            • 2017-06-01
            • 1970-01-01
            • 1970-01-01
            • 2015-03-15
            • 1970-01-01
            相关资源
            最近更新 更多