保护和管理 ADO.NET 应用程序中的敏感信息取决于用于创建敏感信息的基础产品和技术。 ADO.NET 不直接提供服务来保护或加密数据。
加密和哈希代码
.NET Framework System.Security.Cryptography 命名空间中的类可用于 ADO.NET 应用程序,以防止未经授权的第三方读取或修改数据。 有些类是对未管理的 Microsoft CryptoAPI 的封装,另一些类则是托管实现。 加密服务主题概述了 .NET Framework 中的加密,介绍了加密是如何实现的,以及如何执行特定的加密任务。
与加密(允许加密和解密数据)不同,哈希数据是一个单向过程。 如果要通过检查数据尚未更改来防止篡改数据,哈希数据非常有用:给定相同的输入字符串,哈希算法始终生成易于比较的相同短输出值。 使用哈希代码确保数据完整性 介绍了如何生成和验证哈希值。
加密配置文件
保护应用程序时,最重要的目标之一是保护对数据源的访问。 如果连接字符串未受保护,那么它就是一个潜在漏洞。 保存在配置文件中的连接字符串存储在 .NET Framework 为其定义了一组常见元素的标准 XML 文件中。 受保护的配置使你能够加密配置文件中的敏感信息。 尽管主要用于 ASP.NET 应用程序,但受保护的配置也可用于加密 Windows 应用程序中的配置文件部分。 有关详细信息,请参阅保护连接信息。
保护内存中的字符串值
String如果对象包含敏感信息(如密码、信用卡号或个人数据),则使用这些信息后可能会泄露,因为应用程序无法从计算机内存中删除数据。
A String 是不可变的;创建后无法修改其值。 看似修改字符串值的更改实际上会在内存中创建对象的新实例 String ,以纯文本形式存储数据。 此外,无法预测何时将从内存中删除字符串实例。 字符串的内存回收在 .NET 垃圾回收中是非确定性的。 如果您的数据真的很敏感,应该避免使用 String 类和 StringBuilder 类。
类SecureString提供在内存中使用数据保护 API(DPAPI)加密文本的方法。 然后,当不再需要该字符串时,将从内存中删除该字符串。 没有ToString方法可以快速读取SecureString的内容。 可以初始化没有值的新实例 SecureString ,也可以通过将指针传递给对象数组 Char 来初始化它。 然后,可以使用类的各种方法来处理字符串。