如何利用
.net 保护内存中的敏感数据
我们程序的威胁来自于各个方面
.在互联网高度发达的今天, 安全性问题已经是企业软
件开发所必须面对的最重要的问题
. 从安全学的一般意义上来讲,安全性主要体现在两个方
面
:
敏感数据的泄露 敏感数据的破坏
从具体上来说, .NET 元数据机制的设计, 既方便了反射等强大特性的实现, 又同时给代
码安全及程序运行时安全带来了巨大的隐患
.迄今为止, 还未发现比较有效元数据可
见性控制方法
. 当然, 这不在本文的讨论范围之内. 我还是更愿意在这篇文章在针对.
NET 的内存分配机制讨论一个更具体的问题: 如何保护在内存中存储的敏感数据?
String 的驻留机制带来的安全性问题
String 是代码中使用频率很高的对象类型. 为了提高字符串的处理速度, 节省内存空间,
Microsoft 为.NET String 类设计了驻留机制 . 其大概的逻辑模型是 , 大部分
String 存储在一个类似的 Hash Table 中, string 的内容是哈希表的 key, 该 key
对应的
value 是 string 的内存地址. 这样内容相同的 string 实际上只是对应内存
堆上同一个字符串
.之所以说是大部分而不是全部 , 是因为有一部分动态创建
(concat)的 string, 是不会进入这样一个虚拟的 hash Table 中的. 本文的最后附
上
String 类的源代码, 有兴趣的同学可以研究研究:D