27

由于许多 API 通过用户/密码组合提供对其数据的远程访问。

我想知道哪种是存储这些价值的最佳方式,高度安全的方式(即使 100% 是不可能的),以便直接连接它们而无需每次都询问。

4

3 回答 3

22

我推荐以下三种方法之一:

  • 通过使用身份验证令牌完全避免存储密码。在此模型中,用户登录一次,服务器生成一个唯一的、大的、稀疏的令牌,客户端可以存储并使用它作为其登录“密码”。服务器一次只接受来自一个客户端的这个令牌,所以如果两个客户端尝试同时使用它,这个令牌就会失效。令牌通常也会在一段时间后失效(1 周、2 周、一年,任何合适的)。当令牌失效时,用户必须再次手动登录并重复该过程。这基本上是 Gmail 和类似网站登录的方法。

  • 如果您必须存储密码,我建议依靠操作系统为您管理它。Windows 和 Mac 都具有良好的安全存储系统(分别为 DPAPI 和 Keychain)。不过,Linux 并没有一个始终可用的好的解决方案,所以这取决于您的市场。使用操作系统的优势在于操作系统可以提供您自己无法轻易提供的保护,并且用户可以将操作系统存储的整体保护(使用智能卡等)集中管理到您不太可能重现的级别。操作系统安全存储通常对用户来说也很方便。

  • 如果这些都不是选项,则存储一个带有主密码的加密文件,用户每次启动您的应用程序时都必须输入该密码。这就是 Firefox 的工作方式(或者至少在我上次查看时是这样,已经有一段时间了)。这是相当安全的,但对用户来说不太方便(而且便利性低通常意味着用户的采用率低,或者通过更简单的密码使用不当等)。我将研究 Firefox 代码作为如何实现它的示例。

于 2009-10-01T13:18:35.053 回答
1

KeePass甚至提供了一个供开发人员使用的API 。

于 2009-10-01T13:02:30.983 回答
0

最好的方法是依靠其他人来存储它们并信任该方。但是,如果您必须拥有控制权,我建议您阅读一本关于安全系统的好书,然后再考虑一下。有许多变量需要考虑,大多数时候你只是降低风险与成本。

于 2009-10-01T13:00:50.703 回答