【发布时间】:2011-02-05 16:19:46
【问题描述】:
我很惊讶这个问题没有得到深入讨论:
This article 告诉我们如何使用 windbg 将正在运行的 .Net 进程字符串转储到内存中。
我花了很多时间研究 SecureString 类,它使用非托管固定内存块,并保持数据加密。好东西。
当您使用它的值并将其分配给 System.String 类型的 SQLConnection.ConnectionString 属性时,问题就出现了。这是什么意思?嗯……
- 它以纯文本形式存储
- 垃圾收集移动它,在内存中留下副本
- 可以通过 windbg 内存转储读取
这完全否定了 SecureString 功能!
最重要的是,SQLConnection 类是不可继承的,我什至不能用 SecureString 属性来滚动我自己的;是的,闭源。耶。
新的 DAL 层正在进行中,但对于新的主要版本和如此多的用户而言,每个用户升级至少需要 2 年时间,其他人可能会无限期地留在旧版本上,无论出于何种原因。
由于使用连接的频率,从 SecureString 编组将无济于事,因为不可变的旧副本会一直保留在内存中,直到 GC 出现。无法选择集成的 Windows 安全性,因为某些客户端无法在域上运行,而其他客户端则通过网络漫游和连接。
如何保护内存中的连接字符串,使其无法使用 windbg 查看?
【问题讨论】:
-
您指的是驻留在客户机器上的应用程序还是 Web 应用程序?
-
这是一个客户端桌面应用程序.Net 2.0,客户端-服务器架构
标签: .net sql security memory windbg