如果您正在制作 twitter 客户端,请使用他们的 API
Twitter 有非常好的文档,所以我建议你在做客户端之前阅读它。与此问题相关的最重要部分是您不需要存储密码,而是存储OAuth令牌。您需要使用xAuth阶段来获取 OAuth 令牌,然后在必要时将其他 Twitter API 与此 OAuth 令牌一起使用。
xAuth 为桌面和移动应用程序提供了一种将用户名和密码交换为 OAuth 访问令牌的方法。检索到访问令牌后,启用 xAuth 的开发人员应处理与用户对应的登录名和密码。
如果你可以逃脱它,你永远不会存储密码
使用 OAuth 可能发生的最糟糕的情况是第 3 方(黑帽黑客)可以访问该 Twitter 帐户,但不能访问密码。这将保护那些天真地为多个在线服务使用相同密码的用户。
使用某种钥匙串
最后,我同意应该使用 OSX 的钥匙串等预制解决方案来存储敏感的 OAuth 信息,受感染的机器只会泄露当前解锁的钥匙串的信息。这意味着在多用户系统中,只有登录用户的钥匙串才会容易受到攻击。
其他损坏限制
可能有一些我错过的东西,请使用 Google 获取“最佳安全实践”并开始阅读可能相关的内容。
编辑(响应 finnw 所需的一般案例解决方案)
您想要在没有用户输入的情况下访问在线服务。这意味着通常您最多可以通过 Keychain 之类的方式对身份验证凭据进行用户级别的访问控制。
我从未使用过 OSX 钥匙串,所以现在我将谈谈 SELinux。在 SELinux 中,您还可以确保这些身份验证凭据只提供给您的程序。如果我们继续进行操作系统级别的工作,您还可以对从启动到加密的所有进程进行签名,以确保没有其他程序可以模仿您的程序。这完全超出了典型的用户系统,鉴于这种级别的设置,您可以确信用户还不够天真而不会受到损害,或者系统管理员足够兼容。在这个级别,我们可以保护这些凭据。
让我们假设我们在保护这些凭据方面没有走得太远,那么我们可以假设系统受到了损害。此时,身份验证凭据被泄露,在本地对这些凭据进行混淆/加密不会增加任何真正的安全性,也不会将其部分或全部存储在第 3 方服务器上。这很容易看出,因为在没有用户输入的情况下,您的程序需要自行引导以获取这些凭据。如果您的程序可以在没有输入的情况下执行此操作,那么任何对您的混淆/加密/服务器协议进行逆向工程的人都可以。
此时是损坏限制,请勿将密码存储为身份验证凭据。使用 OAuth、cookie 会话、加盐哈希等,它们都只是表示在过去某个时刻你证明你知道密码的令牌。在任何好的系统中,这些令牌都可以被撤销、过期和/或在活动会话期间定期交换新令牌。
令牌(无论其形式如何)还可以包含额外的非用户输入身份验证信息,这会限制您在其他地方使用它们的能力。例如,它可以封装您的主机名和/或 IP 地址。这使得在不同的机器上使用凭证变得困难,因为模仿这些形式的凭证需要访问适当级别的网络基础设施。