使用 ASP.NET 存储敏感信息

更新:2007 年 11 月

在 ASP.NET 应用程序中,您经常需要使用高度敏感的信息。例如,您可能需要使用用户 ID 和密码来连接到数据库,或者可能存储客户用于访问您的应用程序的用户 ID 和密码。虽然您可以在通过网络传递信息时使用安全套接字层 (SSL) 来加密信息,但是,当信息同时存储在服务器和客户端上时,还是必须对其进行保护。本主题讲述有关存储敏感信息的一些通用准则。

kek09k9k.alert_note(zh-cn,VS.90).gif说明:

有关如何存储敏感信息的更多信息,请参见 MSDN 网站上的提高 Web 应用程序安全性:威胁和对策

尽可能地避免存储敏感信息

避免公开应用程序中的敏感信息的最佳方法是不存储敏感信息。尽可能地减少存储敏感信息的位置的数目。避免将应用程序的敏感信息存储在保存于浏览器中的 Cookie 或控件中,因为那样可能会向应用程序的客户端公开敏感信息。避免将敏感信息存储在应用程序的逻辑中,而应该从安全的配置位置或客户端检索敏感信息。

加密敏感信息

确实要存储敏感信息时,应避免将其存储在用户可读的文本中,还要避免以容易解码的格式(如 Base64 编码)存储。相反,应该对信息进行加密,这样,当信息由于某种原因公开给攻击者时,攻击者将无法轻易地确定敏感信息包含的内容。

如果仅需要验证敏感信息,而不必将其解密为用户可读的格式,请使用单向哈希来加密敏感信息。然后,当比较从要验证的源接收的敏感信息时,对收到的值进行哈希处理并比较哈希以进行验证。例如,如果使用 ASP.NET 成员资格和 Forms 身份验证为您的应用程序提供用户身份验证,则将密码格式设置为 Hashed,这样,当将密码存储在数据源中或比较密码以进行验证时,可以使用单向哈希来加密密码。

将敏感信息(如连接字符串、用户凭据或加密密钥)存储在应用程序的 Web.config 文件中时,使用受保护的配置提供程序来加密 Web.config 文件的敏感节。有关受保护配置的更多信息,请参见 使用受保护的配置加密配置信息

有关使用加密来保护敏感信息的更多信息,请参见 .NET Framework 加密模型

使用权限保护敏感信息

将敏感信息存储在文件、数据库、注册表或其他位置中时,使用 NTFS 访问控制列表和数据库权限对这些信息的访问进行以下限制:只有必需的源才能访问并且只能以必要的访问方式进行。有关更多信息,请参见数据库文档或 ASP.NET 必需的访问控制列表 (ACL)

请参见

概念

运行时的 Web 应用程序安全性