mysql - 如何安全地存储密码以备后用
问题描述
我有一个 Web 服务,我必须在其中保存用户密码,以便以后可以与其他网站交互,我需要最安全的方式来存储此密码,并且在需要时仍然能够恢复其原始形式。我知道,因为我需要恢复其原始形式,所以没有太多选择,但我需要最好的一个。
我真的需要原始状态的密码,因为我的网络服务后来访问了一个不是我的网站,我必须输入原始密码
解决方案
如果我正确理解您的问题,那么您只有一对或几对用户/密码要保存为 Web 服务配置的一部分。
根据我在许多项目中的经验,其中一些是针对真正关心安全性的机构客户的,从开发人员的角度来看,解决方案很简单:
- 将配置文件中的密码保存为开放文本
现在你可能会问:“保安到底在哪里?” 软件开发人员的答案是“不关你的事”。这将是在生产服务器上设置应用程序的系统管理员的业务。该管理员将确保:
- 该文件包含连接到可能包含敏感数据的生产系统所需的正确用户/密码
- 该文件只能在本地访问,并且只能由运行 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 package libsecret-tools(实用工具 secret-tool)或搜索您的编程语言的 API。
推荐阅读
- android - 是使用 ExecutorService+Runnables 还是使用 Call Enqueue 更好?
- javascript - 使用嵌套的对象数组从对象数组中创建 csv
- mongodb - MongoDB查询:如何获取父节点是动态的嵌套字段的所有值?
- elasticsearch - Elasticsearch NEST 客户端兼容性
- azure - 使用异步消息传递(Azure 服务总线)处理客户端 Http 请求
- python - 来自 yfinance 的实时数据
- sql - 截断 Oracle PL/SQL 块中的多个表失败
- html - “数据:...”链接中的自定义名称
- apache-spark-sql - 使用 Spark Sql 的奇怪月份序列
- azure - Azure 数据工厂到 Azure Blob 存储权限