我有一个网络服务,我必须保存用户密码,以便我可以与其他网站互动以后,我需要最安全的方式来存储这个密码,仍然能够恢复其原始形式时,需要的。我知道,因为我需要恢复它原来的形式没有很多选择,但我需要最好的一个。我真的需要原始状态下的密码,因为我的web服务以后访问的网站不是我的,我必须输入原始密码
wnavrhmk1#
没有防弹的方法来解决这个问题,客户端最终需要访问服务器,因此攻击者可以用足够的权限对客户端进行攻击。您所描述的是oauth2协议的一个典型场景,但是从您的评论中我得到,这不是一个选项。如果您自己的服务要求自己登录,那么您可以从用户密码中取出一个密钥来加密外部密码。然后可以将此密钥保存在会话中,以供以后使用。即使用户没有登录到您的服务,您也可以请求密码来解密外部密码。另一个选择是,在您的web服务启动时请求密码。只要服务运行,它就可以保存在内存中,因此您不必将外部密码存储在数据库中。
xv8emn3q2#
不要使用salt,使用php has,password\u hash()之类的技术
kpbpu0083#
如果我正确理解了您的问题,那么您只有一对或几对用户/密码,希望将其保存为web服务配置的一部分。根据我在许多项目中的经验,其中一些项目是针对真正关心安全性的机构客户的,从开发人员的Angular 来看,解决方案很简单:将密码以打开文本的形式保存在配置文件中现在你可能会问:“安全性到底在哪里?”软件开发人员的回答是“不关你的事”。这将是在生产服务器上设置应用程序的系统管理员的工作。该管理员将确保:该文件包含连接到可能包含敏感数据的生产系统所需的正确用户/密码该文件只能在本地访问,并且只能由运行web服务的用户访问文件保存在一个加密的磁盘上,这样如果其他人拔掉磁盘插头并将其连接到另一个系统,它就不会被其他人读取(嗯,我从来没有做过这样的管理员,所以我可能遗漏了一些东西……)在我工作的特定项目中设置配置文件的示例:在svn中有一个 config.properties 它包含不包含任何敏感数据的测试环境的用户/密码,因此我们不关心存储库的任何用户是否可以读取这些密码在加载 config.properties 系统查看是否存在名为 config.properties.local 装上那个而不是那个 config.properties 如果有。此本地文件被svn忽略且未提交。所以有了这个 config.properties.local ,开发人员可以从 config.properties 他在开发环境中的价值观和部署应用程序的管理员使用的方法相同 config.properties.local 提供生产用户/密码,并确保上述文件的安全性。编辑:最后,事实上,我建议保存到一个纯文本文件中,由适当的访问权限和文件系统加密保护。虽然这仍然是我在安装应用程序时经常看到的常见解决方案,因此您可能应该尝试为此目的使用操作系统内置的支持。例如,在我使用的ubuntu中,有gnome keyring。一种密码管理器,可以安全地存储加密的密码,并在应用程序再次需要时解密它们。用户登录时自动解锁,使用方便。gui被称为seahorse(预装在ubuntu中)。对于cli,请安装apt包libsecret tools(实用工具secret tool)或搜索编程语言的api。
config.properties
config.properties.local
3条答案
按热度按时间wnavrhmk1#
没有防弹的方法来解决这个问题,客户端最终需要访问服务器,因此攻击者可以用足够的权限对客户端进行攻击。您所描述的是oauth2协议的一个典型场景,但是从您的评论中我得到,这不是一个选项。
如果您自己的服务要求自己登录,那么您可以从用户密码中取出一个密钥来加密外部密码。然后可以将此密钥保存在会话中,以供以后使用。
即使用户没有登录到您的服务,您也可以请求密码来解密外部密码。
另一个选择是,在您的web服务启动时请求密码。只要服务运行,它就可以保存在内存中,因此您不必将外部密码存储在数据库中。
xv8emn3q2#
不要使用salt,使用php has,password\u hash()之类的技术
kpbpu0083#
如果我正确理解了您的问题,那么您只有一对或几对用户/密码,希望将其保存为web服务配置的一部分。
根据我在许多项目中的经验,其中一些项目是针对真正关心安全性的机构客户的,从开发人员的Angular 来看,解决方案很简单:
将密码以打开文本的形式保存在配置文件中
现在你可能会问:“安全性到底在哪里?”软件开发人员的回答是“不关你的事”。这将是在生产服务器上设置应用程序的系统管理员的工作。该管理员将确保:
该文件包含连接到可能包含敏感数据的生产系统所需的正确用户/密码
该文件只能在本地访问,并且只能由运行web服务的用户访问
文件保存在一个加密的磁盘上,这样如果其他人拔掉磁盘插头并将其连接到另一个系统,它就不会被其他人读取
(嗯,我从来没有做过这样的管理员,所以我可能遗漏了一些东西……)
在我工作的特定项目中设置配置文件的示例:
在svn中有一个
config.properties
它包含不包含任何敏感数据的测试环境的用户/密码,因此我们不关心存储库的任何用户是否可以读取这些密码在加载
config.properties
系统查看是否存在名为config.properties.local
装上那个而不是那个config.properties
如果有。此本地文件被svn忽略且未提交。所以有了这个
config.properties.local
,开发人员可以从config.properties
他在开发环境中的价值观和部署应用程序的管理员使用的方法相同config.properties.local
提供生产用户/密码,并确保上述文件的安全性。编辑:最后,事实上,我建议保存到一个纯文本文件中,由适当的访问权限和文件系统加密保护。
虽然这仍然是我在安装应用程序时经常看到的常见解决方案,因此您可能应该尝试为此目的使用操作系统内置的支持。
例如,在我使用的ubuntu中,有gnome keyring。一种密码管理器,可以安全地存储加密的密码,并在应用程序再次需要时解密它们。用户登录时自动解锁,使用方便。gui被称为seahorse(预装在ubuntu中)。对于cli,请安装apt包libsecret tools(实用工具secret tool)或搜索编程语言的api。