c# – 内存堆安全性:字符串垃圾收集

我最近一直在为我的公司进行安全代码审查,并使用名为Fortify360的工具.它将识别代码的许多问题并描述问题.它提出的一个有趣的问题是我没有找到任何其他信息如下:

“存储在内存中的敏感数据(如密码)如果存储在托管的String对象中,可能会泄漏.字符串对象没有固定,因此垃圾收集器可以随意重定位这些对象并在内存中留下几个副本.这些对象是认情况下没有加密,所以任何能够读取进程内存的人都能看到内容.此外,如果进程’内存被换出到磁盘,则字符串的未加密内容将被写入交换文件.,因为String对象是不可变的,所以只能通过CLR垃圾收集器从内存中删除String的值.除非CLR内存不足,否则不需要运行垃圾收集器,因此不能保证何时垃圾将发生收集.如果应用程序崩溃,应用程序的内存转储可能会泄露敏感数据.“

所有这些我理解为很有道理,而且我对这个问题的研究非常标准.

问题是:我该如何解决这个问题?假设有问题的类不能从idisposable继承(非常大的应用程序,并且在所讨论的字符串之后很久就需要该类).是否有另一种手动内存管理方式来处理特定字符串而不调用垃圾收集器,GC.Collect()??

提前感谢您的帮助.

亚历克斯

解决方法

如果你想避免这种情况,你需要使用 System.SecureString(Idisposable)来保存敏感数据,只保留所需的最短时间.

具有讽刺意味的是,MSDN示例代码不会显式地或使用封装来处理实例.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...