Hows会阻止密码和其他敏感信息出现在ASP.NET转储中吗?

blo*_*aak 26 asp.net security crash-dumps iis-7.5

如何防止在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应用程序的转储并发现用户的密码和其他机密数据,因为此信息既未加密,也未在使用后清除ASP.NET使用的内存.

这使他们处于危险之中,因为他们可以访问它.有时会与合作伙伴(例如Microsoft)共享转储,以帮助他们诊断代码中的问题.它是在一个应用程序中诊断一些非常复杂的问题的必要部分.

我看到的东西

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

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

Gra*_*ter 0

我知道这并不能直接回答问题,但为什么不以不同的方式看待这个问题呢?

您可以轻松地组合一些 JavaScript 来执行哈希客户端。我会将密码与随机的内容(例如服务器发送的 GUID)结合起来,并且仅对单次使用有效。数据交换将不再包含密码,并且可以轻松地在服务器端比较哈希值。它仅对会话有效,因此查看转储数据的人将来无法使用哈希来“验证”自己。

在文件方面,这些文件是如何上传的?直接从网页?有相当多的 javascript 库可以进行加密(blowfish),在发送敏感文件时我肯定会使用此选项。它确实会降低速度,但您可以确定数据是安全的。