如何安全存储密码以备后用

时间:2018-10-31 03:45:32

标签: mysql password-protection

我有一个Web服务,其中必须保存用户密码,以便以后可以与其他网站进行交互,我需要最安全的方式来存储此密码,并且仍然能够在需要时恢复其原始格式。 我知道,由于我需要恢复其原始格式,因此没有太多选择,但是我需要最好的选择。

我真的需要处于原始状态的密码,因为我的Web服务以后会访问不是我的网站,因此我必须输入原始密码

3 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,那么您只有一对或几对用户/密码要保存为Web服务配置的一部分。

根据我在多个项目中的经验,其中一些是真正关心安全性的机构客户,从开发人员的角度来看,解决方案很简单:

  • 将密码保存为配置文件中的开放文本

现在您可能会问:“安全到底在哪里?”对软件开发人员的答案是“与您无关”。将由系统管理员负责在生产服务器上设置应用程序。该管理员将确保:

  • 该文件包含连接到可能包含敏感数据的生产系统所需的正确用户/密码
  • 该文件只能在本地访问,并且只能由运行Web服务的用户访问
  • 文件已保存在加密磁盘上,因此,如果其他人拔出磁盘并将其连接到其他系统,则其他人将无法读取该文件

(嗯,我从未以这样的管理员的身份工作过,所以我可能省略了一些东西...)

在我工作过的特定项目中配置文件的示例:

  • 在SVN中,有一个config.properties包含用于不包含任何敏感数据的测试环境的用户/密码,因此我们不在乎存储库中的任何用户都可以读取这些密码
  • 在加载config.properties之前,系统将查看是否存在名为config.properties.local的文件,并加载该文件而不是config.properties(如果存在)。 SVN将忽略此本地文件,并且不会提交该文件。
  • 因此,使用此config.properties.local,开发人员可以在开发环境中使用其值覆盖config.properties中的用户/密码,并且部署应用程序的管理员也使用此{{1} },以提供生产用户名/密码并确保文件的安全性。

编辑:实际上,最终,我建议将上述文件保存到受适当访问权限和文件系统加密保护的纯文本文件中。

尽管这仍然是安装应用程序时经常看到的常见解决方案,所以您可能应该为此目的尝试使用操作系统内置的支持。

例如,在我使用的Ubuntu中,有Gnome Keyring。一种密码管理器,可以安全地存储加密的密码,并在应用程序再次需要时将其解密。用户登录时会自动解锁,因此使用方便。 GUI被称为Seahorse(预装在Ubuntu中)。对于CLI,请安装apt软件包libsecret-tools(实用程序秘密工具)或搜索用于您的编程语言的API。

答案 1 :(得分:0)

没有防弹方法可以解决此问题,客户端最终需要访问服务器,因此可以为客户端提供足够特权的攻击者。您所描述的是OAuth2协议的典型情况,但是从您的评论中我知道,这不是一个选择。

  1. 如果您自己的服务需要自行登录,则可以 从用户密码中破坏密钥,以加密外部 密码。然后可以将此密钥保存在会话中,以备后用。
  2. 即使用户未登录到您的服务,您也可以请求 密码只是用来解密外部密码。
  3. 另一种选择是,在Web服务启动时要求输入密码。只要服务运行,它就可以保留在内存中,因此您不必将外部密码存储在数据库中。

答案 2 :(得分:-1)

不要用盐,要使用类似PHP的密码password_hash()