我应该如何在数据库中存储 known/hard-coded 密码?

How should I store a known/hard-coded password in the database?

我有一个使用已知用户名和密码组合登录外部服务器的网络应用程序。有多个 username/password 组合用于不同的服务。现在,它们基本上 "hard-coded" 进入了网站代码,但是,为了更好的安全性,我想将这些信息移出代码库。

我最初的想法是将这些数据存储在用于支持网站的数据库中。我想以一种不容易 "hackable" 的方式存储它(即我不会将它存储为纯文本或 MD5 哈希)。我是否应该遵循我用来存储网站用户密码的相同格式,我使用随机数生成器为每个密码创建 SALT,然后将密码存储为密码和 SALT 的哈希组合,或者这会不会太过分了?

通常,在应用程序代码中存储密码总是一个坏主意。将其移出代码有很多优势,包括安全性。

现在将其存储在数据库或配置文件中是您必须根据您的应用程序做出的选择。

为了完全安全,您永远不应以可检索的形式存储密码。但是要像您的情况一样登录到外部服务器,您需要获取实际的纯文本密码,因此一种哈希方法对您不起作用。

在我们的产品中,我们使用 2 Way SSL Certificates 来处理这种情况。非常安全,无需存储密码。

但如果你真的需要存储密码,那么我会建议使用configuration file并让你的应用程序读取它。您可以加密存储在 configuration files 中的密码(加密存储在 configuration file 中的密码将再次带您回到如何保护密钥的相同问题)。应限制对 configuration file 的访问(在 Unix 中,600 File Permission)。

或者,如果您的 Web 应用程序是 Java,那么您可以考虑使用 JNDI

经过更多研究,我现在决定遵循这里的想法:

Encrypt a Column of Data - SQL Server | Microsoft Docs

...和 ​​encrypt/decrypt 在存储过程中的数据库上。