在 Web 应用程序中存储用户名/密码的实践

信息安全 Web应用程序 密码 密码管理 数据库 爪哇
2021-08-20 21:41:30

我已阅读以下问题:Storing password in Java application但我没有找到对我的案例有用的答案。

所以这是我的问题与此有关。我有一个带有用户名和密码的后端数据库安全访问的 Java Web 应用程序。

现在,用户名/密码位于 Web 服务器上的 .properties 文件中。服务器是安全的,但是以纯文本形式显示它有点困扰我。

在某些时候尝试使用安全存储来加密/解密用户名和密码,但存储本身受密码保护,那么我在哪里存储呢?我回到第一方。

所以?存储用于连接其他系统(数据库、Web 服务等)的用户名/密码的最佳方式是什么

2个回答

服务器需要能够访问某些资源 R。如果攻击者完全控制了服务器,那么根据定义,攻击者现在可以访问服务器可以访问的任何资源。除了保护服务器之外,您绝对无能为力。

如果攻击者没有完全控制服务器但可以访问服务器的文件系统,那么问题是服务器是否需要自主启动(没有任何外部帮助)。如果服务器需要自主启动,那么访问资源 R 所需的所有数据都必须驻留在服务器文件系统中的某个位置,从而可供攻击者使用。您能做的最好的事情就是尝试混淆密码 - 祝您好运。

如果服务器可以使用外部帮助来引导,那么最好的选择是要求管理员在引导期间输入密码(并将密码保存在 RAM 中)。如果这不是一个实际的选择(通常不是),那么您可以使用 USB 令牌保护密码(例如,存储加密密码并使用 USB 令牌对其进行解密)。

TL;DR:假设您无法在每次启动服务器时手动输入密码,除了保护服务器本身之外,您无能为力。

关于加密的答案没有错,但方法是错误的。你不应该加密。您应该使用单向哈希函数。这意味着您对密码执行不可逆的数学运算,并存储结果。

当有人想登录时,你对他们提供的密码再次执行操作,并将其与记录的结果进行比较。

在这里加载更多细节。

https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet