我有一个Web服务,其中必须保存用户密码,以便以后可以与其他网站进行交互,我需要最安全的方式来存储此密码,并且仍然能够在需要时恢复其原始格式。 我知道,由于我需要恢复其原始格式,因此没有太多选择,但是我需要最好的选择。
我真的需要处于原始状态的密码,因为我的Web服务以后会访问不是我的网站,因此我必须输入原始密码
答案 0 :(得分:1)
如果我正确理解了您的问题,那么您只有一对或几对用户/密码要保存为Web服务配置的一部分。
根据我在多个项目中的经验,其中一些是真正关心安全性的机构客户,从开发人员的角度来看,解决方案很简单:
现在您可能会问:“安全到底在哪里?”对软件开发人员的答案是“与您无关”。将由系统管理员负责在生产服务器上设置应用程序。该管理员将确保:
(嗯,我从未以这样的管理员的身份工作过,所以我可能省略了一些东西...)
在我工作过的特定项目中配置文件的示例:
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协议的典型情况,但是从您的评论中我知道,这不是一个选择。
答案 2 :(得分:-1)
不要用盐,要使用类似PHP的密码password_hash()