asp.net - 如何防止密码和其他敏感信息出现在 ASP.NET 转储中?

标签 asp.net security iis-7.5 crash-dumps

如何防止在 IIS/ASP.NET 转储文件中向 ASP.NET 网页提交和接收密码和其他敏感数据?

重现步骤

  1. 使用 Visual Studio 2010 创建 ASP.NET MVC 3 Intranet 应用程序。
  2. 将其配置为使用 IIS 7.5。
  3. 启动它并注册一个帐户(假设 bob123 作为用户,Pa$$w0Rd 作为密码。我假设 SQL Express 数据库已创建并且该网站功能齐全。
  4. 使用任务管理器,右键单击 w3wp 进程并创建转储。
  5. 在能够将其内容显示为十六进制的编辑器(例如 SlickEdit)中打开转储。
  6. 在十六进制转储中搜索“Pa$$0Rd”和“Pa%24%24w0Rd”。您应该能够找到以 ASCII、Unicode 或编码形式存储的多个副本。

请注意,是否使用 HTTPS 并不重要,因为它仅对通信进行加密。 ASP.NET 将该数据以明文形式存储在内存或磁盘中。

问题

普遍的看法是对敏感数据进行加密,而不是将其以明文形式存储。然而,员工可能会收到 IIS/ASP.NET 应用程序的转储并发现用户的密码和其他 secret 数据,因为这些信息既没有加密,也没有在使用后清除 ASP.NET 使用的内存。

这使他们面临风险,因为他们有权访问它。有时与合作伙伴(例如 Microsoft)共享转储以帮助他们诊断代码中的问题。这是诊断应用程序中一些非常复杂的问题的必要部分。

我看过的东西

  1. 对密码和其他敏感数据使用 SecureString。但是,ASP.NET 成员资格提供程序以及 WCF 等其他框架通常接受 System.String 形式的密码,这意味着这些副本仍将位于转储中。
  2. 查看框架中是否有任何内容可以在不再使用 System.String 时清除该副本。我找不到任何东西。
  3. 调查了 IIS 完成后是否可以将用于请求和响应的内存清零,但我找不到任何东西。
  4. 我调查了是否可以加密 IIS 接收的文件(如 HttpPostFile),以便它们不会以明文形式存储。我们可能会收到极其 secret 的文档,并且每一步都会在服务器上进行加密和保护。但是,有人可以从 IIS 转储中清晰地提取它们。

我希望告诉 IIS/ASP.NET 特定的请求/响应包含敏感数据,并且 IIS/ASP.NET 在使用完内存后将清除内存。

最佳答案

根据定义,转储文件转储应用程序在转储时使用的所有内存,如果您要创建一个过滤器以便排除某些内容,那么您永远无法确定您是否使用了转储文件。有足够的数据来解决问题。

您愿意将您的数据库/配置设置移交给第三方吗?如果不是,那么您可能也不应该移交转储文件。 (恕我直言)

关于asp.net - 如何防止密码和其他敏感信息出现在 ASP.NET 转储中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9964281/

相关文章:

wcf - 使用 Windows 身份验证调用 WCF 服务时无法执行 URL

c# - IIS 混合匿名和 Windows 身份验证

c# - 如何使用 __doPostBack()

vb.net - 在 vb.net 中安全地存储敏感数据的位置

Azure AD list - 可选声明

python - 使用 Mercurial 克隆时 SSL 包装器出错

c# - 使用 C# 从 Web 应用程序打开文件夹,拒绝访问

asp.net - 从 <html lang ="fr"> 标记设置 ASP.NET 页面文化?

c# - 按钮变灰,直到所有文本框都包含 ASP 中的文本

c# - 在 asp.net 中将数据表从一个页面发送到另一个页面