我应该如何在数据库中存储已知/硬编码的密码?

时间:2019-03-19 17:13:31

标签: security passwords password-encryption password-hash

我有一个Web应用程序,使用已知的用户名和密码组合登录到外部服务器。有多种用于不同服务的用户名/密码组合。现在,它们实际上是“硬编码”到网站代码中的,但是,我想将此信息从代码库中移出,以提高安全性。

我最初的想法是将这些数据存储在用于支持网站的数据库中。我想以一种不容易“破解”的方式存储它(即,我不会将其存储为纯文本或MD5哈希值)。我是否应该采用与存储网站用户密码相同的格式,在其中我使用随机数生成器为每个密码创建SALT,然后将密码存储为密码和SALT的哈希组合,还是过大? / p>

2 个答案:

答案 0 :(得分:0)

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

现在必须将其存储在数据库或配置文件中,这取决于您的应用程序。

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

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

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

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

答案 1 :(得分:0)

经过更多研究,我决定在此处遵循以下想法:

Encrypt a Column of Data - SQL Server | Microsoft Docs

...并在存储过程中对数据库进行加密/解密。