background image

如何利用

.net 保护内存中的敏感数据

我们程序的威胁来自于各个方面

.在互联网高度发达的今天, 安全性问题已经是企业软

件开发所必须面对的最重要的问题

. 从安全学的一般意义上来讲,安全性主要体现在两个方

:

 

敏感数据的泄露 敏感数据的破坏

      从具体上来说, .NET 元数据机制的设计, 既方便了反射等强大特性的实现, 又同时给代

码安全及程序运行时安全带来了巨大的隐患

.迄今为止, 还未发现比较有效元数据可

见性控制方法

. 当然, 这不在本文的讨论范围之内. 我还是更愿意在这篇文章在针对.

NET 的内存分配机制讨论一个更具体的问题: 如何保护在内存中存储的敏感数据?

String 的驻留机制带来的安全性问题

      String 是代码中使用频率很高的对象类型. 为了提高字符串的处理速度, 节省内存空间,

 Microsoft 为.NET String 类设计了驻留机制 . 其大概的逻辑模型是 , 大部分

String 存储在一个类似的 Hash Table 中, string 的内容是哈希表的 key, 该 key

对应的

value 是 string 的内存地址. 这样内容相同的 string 实际上只是对应内存

堆上同一个字符串

.之所以说是大部分而不是全部 , 是因为有一部分动态创建

(concat)的 string, 是不会进入这样一个虚拟的 hash Table 中的. 本文的最后附

String 类的源代码, 有兴趣的同学可以研究研究:D