首页 文章

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

提问于
浏览
26

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

Steps to reproduce

  • 使用Visual Studio 2010,创建ASP.NET MVC 3 Intranet应用程序 .

  • 将其配置为使用IIS 7.5 .

  • 启动它并注册一个帐户(比如bob123作为用户,而pa $$ w0Rd作为密码 . 我假设创建了SQL Express数据库并且网站功能完备 .

  • 使用任务管理器,右键单击w3wp进程并创建转储 .

  • 在能够以十六进制显示其内容的编辑器中打开转储,例如SlickEdit .

  • 在十六进制转储中搜索"Pa$$0Rd"和"Pa%24%24w0Rd" . 您应该能够找到以ASCII,Unicode或编码形式存储的多个副本 .

请注意,使用HTTPS无关紧要,因为它只会加密通信 . ASP.NET将数据存储在内存或磁盘中 .

The problem

通用的智慧是加密敏感数据而不是将其存储在清晰的数据中 . 但是,员工可能会收到IIS / ASP.NET应用程序的转储并发现用户的密码和其他机密数据,因为此信息既未加密,也未在使用后清除ASP.NET使用的内存 .

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

Things I looked at

  • 对密码和其他敏感数据使用SecureString . 但是,ASP.NET成员资格提供程序以及其他框架(如WCF)通常接受密码作为System.String,这意味着这些副本仍将在转储中 .

  • 查看框架中是否有任何内容在不再使用时清除System.String的副本 . 我找不到任何东西 .

  • 调查一旦IIS完成后,是否可以将用于请求和响应的内存清零,但我无法找到任何内容 .

  • 我调查了一个可以加密IIS接收的文件(如HttpPostFile),以便它们不会以明文形式存储 . 我们可能会收到极其机密的文档,并且每一步都会在服务器上加密和保护它们 . 但是,有人可以从IIS转储中清除它们 .

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

2 回答

  • 1

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

    您是否愿意将数据库/配置设置移交给第三方?如果没有那么你可能不应该交出dumpfiles . (恕我直言)

  • 0

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

    您可以轻松地将一些javascript放在一起进行哈希客户端 . 我会将密码与随机的东西组合在一起,例如服务器发送的guid,只对一次使用有效 . 数据交换将不再包含密码,并且哈希可以很容易地与服务器端进行比较 . 它只对会话有效,因此查看转储数据的人将来无法使用哈希“自我验证” .

    在文件方面,这些文件是如何上传的?直接来自网页?有很多javascript库进行加密(河豚),我肯定会在发送敏感文件时使用此选项 . 它确实有速度惩罚,但您可以确定数据是安全的 .

相关问题