为 asp.net 存储密钥、密码的安全方法

Posted

技术标签:

【中文标题】为 asp.net 存储密钥、密码的安全方法【英文标题】:Secure methods of storing keys, passwords for asp.net 【发布时间】:2010-09-16 23:05:03 【问题描述】:

为网站存储密钥和/或密码的最佳做法是什么。这些密钥用于各种第 3 方 Web 服务。最好将它们放在 Web.config 文件或数据库中,还是以某种方式加密?

【问题讨论】:

【参考方案1】:

取决于值更改的频率。如果它们永远不会改变,那么我会将它们保留在您的源代码中。

我不会在 Web.Config 中存储更改的数据,因为更改它会强制重新启动应用程序池。

我的投票是将它们加密存储在数据库中,并为更改值提供一种简单的方法(例如,将值存储在缓存中并在用户更改它们时刷新它们)。

【讨论】:

【参考方案2】:

您可以将加密的值存储在 .config 文件中,ASP.NET 2.0 会即时解密它们。

您的配置将类似于:

<configSections>
   <section 
      name="sampleSection" 
      type="System.Configuration.SingleTagSectionHandler" 
   />
</configSections>

<MySecrets
   FavoriteMusic="Disco" 
   FavoriteLanguage="COBOL" 
   DreamJob="Dancing in the opening ceremonies of the Olympics" 
/>

然后您从命令行运行以下命令,在与您的配置文件相同的目录中:

aspnet_regiis -pef MySecrets .

来自 K. Scott Allen:

http://odetocode.com/Blogs/scott/archive/2006/01/08/2707.aspx

【讨论】:

【参考方案3】:

假设您的数据库无法从外部世界访问,或者您已将其正确锁定,这将是存储密钥的首选方式。这允许您的所有应用程序从同一个密钥/密码存储中提取,从而非常快速和轻松地进行更改。

【讨论】:

以上是关于为 asp.net 存储密钥、密码的安全方法的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET JWT:签名验证失败。没有提供安全密钥来验证签名

《ASP.NET Core 6框架揭秘》实例演示[20]:“数据保护”框架基于文件的密钥存储...

从 ASP.NET 应用程序访问 Azure 存储帐户文件共享

Membership 介绍

ASP.NET Identity 的默认密码哈希器 - 它是如何工作的,它是不是安全?

Asp.net Identity 密码哈希