我在做一个twitter的客户,而且我评估的各种方式保护用户的登录信息。

重要的是:我需要保护用户的数据从其他应用。例如想象会发生什么,如果一个机器人开始绕来绕去偷Twhirl密码或Hotmail/应用程序有助于雅虎/Paypal从上运行的应用程序的用户的桌面上。

澄清:我问这之前没有'重要'的一部分,但计算器的UI无助于加详情后述内Q/对话。

  • 哈希显然不会这样做
  • 混淆在一个可逆的方式就像是试图躲在我的手指
  • 纯文字的声音和propably是混杂
  • 需要用户类型在他的密码,每次会使用令人厌烦

任何想法?

有帮助吗?

解决方案

这是一个赶上-22.要么你让用户类型在他的密码,每一次,或存储这不安全(模糊的加密,无论).

的方式来解决这个问题是,为多个操作系统纳入密码管理人员状OS X是钥匙链。这样,你只要储存你的密码钥匙串、操作系统保持它的安全,并使用户只有在1掌握密码。许多应用程序(如Skype)在OS X使用钥匙串做什么你都描述的。

但因为你可能使用Windows,我想说的只是去与一些混淆和加密。我认为你可以稍微偏执狂有关密码-偷窃-机器人的;如果应用程序没有大的用户群,赔率是很低的,有人会目标和具体企图偷窃的密码。除此之外,他们还将有机会获得他们的受害者的文件系统。如果是这种情况下,他们可能有一个病毒/蠕虫和有更大的问题。

其他提示

我觉得你缺少更大的图片在这里:

如果桌面受到损害,你F#*%ED!

偷一个密码从你的程序,病毒就必须在系统上运行的为管理员。如果该病毒已经实现,窃取密码从你的节目的方式下这列表中的恶意的事情要做。

它存储在纯文本和 让用户知道.

这样,有没有误解关于什么水平的保安,你已经实现。如果用户开始抱怨, 考虑 异或清公布在你的网站不断它。如果用户不断抱怨,"隐藏"的定在你的代码告诉他们这是坏安全。

如果用户不能让坏人开箱,然后 在效果 所有的秘密数据他们所知博士邪恶。不论它是否加密,或者不。如果他们能让邪恶的人,为什么要担心储存密码以纯文本?

我可能是说出我的屁股在这里,当然。有一项研究显示出,保存密码以纯文本的结果更糟糕的安全比储存它们混淆?

如果你是一个twitter客户然后使用他们的API

Twitter有很好的 文档, 所以我劝你还是读了这一切之前,让一个客户。最重要的部分中有关这个问题是,你不需要储存的密码、商店的 保护身份验证 令代替。你需要用到的 xAuth 阶段获得的护身份验证标记,然后使用其他Twitter API这个护身份验证令牌在必要。

xAuth提供了一种方法,为桌面应用程序和移动应用程序,以交换一个 用户名和密码保护身份验证接入令牌。一旦接入令牌 被检索,xAuth启用开发者应处置的登录和 密码对应的用户。

你从来不保存密码如果你可以带走它

使用护身份验证可能发生的最糟糕的是一个第3方(黑帽黑客)获取 访问 这Twitter帐户,但不是的 密码.这将保护用户,其天真地使用同一个密码,用于多的在线服务。

使用钥匙链的某种

最后,我同意,预先作出解决方案,例如OS x的钥匙应该用于储存敏感的护身份验证信息,一个妥协的机会仅揭示了信息的目前锁的钥匙圈.这意味着在一个多用户的系统仅仅登录用户有自己的钥匙串变得脆弱。

其他损害的限制

可能有东西,我已经错过了采取一个谷歌"最佳安全做法",并开始阅读什么可能是相关的。

编辑 (响应finnw所需的一般情况下解决方案)

你想要的,没有输入的用户,访问了一个在线服务。这意味着通常你有,在大多数用户一级的访问控制以认证的凭证,通过喜欢的东西钥匙链。

我从来没有使用OS x钥匙所以现在我要谈谈如何.在如何你还可以确保这些认证的凭证,只会给你的程序。如果我们继续在操作系统级别的东西,你也可以签署的所有进程从启动到cryptographicly将某些没有其他程序可能是模仿你的节目。这是所有超越典型的用户的系统,并给予这一级别的安装你可以放心的用户是不是幼稚的,足以损害,或一个系统管理员是compitant够的。在这个水平,我们可以保护这些凭证。

让我们假设我们不去那么远到保护那些凭证,然后我们可以假设的系统受到损害。在这一点的认证证书成为受到损害,混淆/加密这些凭证上的局面不加任何真正的安全,而且也不储存的一部分或全部在一个第3方服务器。这是简单易见的,因为没有用户输入您的程序需要引导自身获得这些凭证。如果你的节目可以做它没有输入的,那么很可能任何人扭转了工程你的混淆/加/服务器协议。

在这一点上,它是损害限制,不存储的密码认证的凭据。使用护身份验证,cookie会议,咸hashs,等等,他们都只是标记,表示在某些时候在过去,你证明了你知道密码。在任何良好的系统,这些标记可以撤销的时间过期和/或定期交换为一个新的令牌在活跃的会议。

令牌(无论是什么形式,它可能)可能还包含其他非用户输入的身份验证的信息,这限制了你的能力使用到其他地方。它可以例如包封你的主机名称和/或IP地址。这使得它难以使用该凭证在一个不同的机器由于仿造这些形式的证书将需要访问的适当水平的网络基础设施。

在进一步思考,我认为我找到了一种方法。我会用ASP.net 鉴于我的桌面应用程序的应用、储存他们的证书在线以及让互联网资源管理器的密码管理处理地方的高速缓存这次对或凭对我来说。

我将只需要让他们进行身份验证通过Facebook-API等形式,在第一次登录。

我不得到它...为什么是密不好?使用大关键和商店的钥匙在机的关键存放(假设Windows)。完成,并且完成。

OS x:使用钥匙扣

Windows:使用CryptProtectData和CryptUnprotectData

Linux:使用侏儒钥匙圈和KDE电子钱包

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top