2

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

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

  • System.Environment.MachineName(可能在网络场场景中有用)
  • 系统.环境.版本
  • 环境.用户名
  • 数据库名称
  • 当前用户的会话 ID

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

编辑 :

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

编辑 2:

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

4

4 回答 4

2

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

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

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

于 2010-05-06T00:46:36.060 回答
1

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

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

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

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

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

于 2010-05-06T00:58:26.433 回答
0

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

于 2010-05-06T05:04:17.340 回答
0

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

于 2010-05-06T15:25:42.263 回答