将密码存储到没有OpenID的API的安全方法?

时间:2010-04-20 12:16:31

标签: security passwords eventbrite confidentiality

前一段时间我问了similar question here但是所有的答案都提供了OpenID,这很好但是它不适用于那些需要不使用身份验证的服务(例如EventBrite)。

说我想创建一个应用程序,列出事件brite中的事件及其分析(包括eventbrite)。任何人都可以注册此服务以列出他们的活动。但由于EventBrite没有OpenID进行身份验证,我需要以某种方式获取用户登录和密码到EventBrite。

一些可能的解决方案是:

  1. 将凭据存储在YAML like this中。容易破解。
  2. 让用户在我的网站上的表单中输入凭据,我将凭据保存到我的数据库,并使用它们登录到EventBrite。容易破解。
  3. 让用户输入凭据并将其直接传递给EventBrite而不保存,我将响应头Cookie保存到数据库,当它们过期时,让他们再次登录。这很容易被破解吗?
  4. 这个假设的服务也想自动检查事件(比如通过cron),所以它不依赖于用户通过浏览器访问我的网站。因此,cookie或信用证需要存储在某个地方。

    问题是,after asking this similar question about confidentiality and security听起来你应该从不构建一个能够完成我所描述的应用程序。必须有某种方式来构建这样的东西是可以的。

    那是什么意思?我错过了什么?是否可以使用#3并保存cookie(但仍然需要用户通过我发送给Eventbrite的表单提交他们的电子邮件/密码)?该问题的可接受解决方案是什么?

4 个答案:

答案 0 :(得分:1)

没有一种安全的方法可以做到这一点。你可以使用变通办法,但就是这样。

  1. 明确地以明文形式存储YAML或XML中的密码
  2. 事实上,即使加密和存储密码也是错误的。您的应用程序需要一种方法来解密密码,因此攻击者也可以解密密码。
  3. 存储密码的推荐方法是Salt + Hash,但因为它变得无法恢复,所以在你的情况下没用。
  4. 因为2& 3,无论您在何处存储用户凭据,您都很容易受到攻击。
  5. 存储Cookie而不是密码是一个更好的主意。但同样,这涉及通过您的网站的密码,这是不好的。
  6. 根据您的情况,存储cookie是一种更好的方法。始终在您的网站上使用HTTPS。它不太理想,你和你的用户应该知道它。

答案 1 :(得分:1)

Eventbrite最近发布了描述how to implement OAuth2.0 for cross-site user authentication的新文档。 我建议使用我们的javascipt-based OAuth2.0 widget,它默认在浏览器的localStorage中存储用户的身份验证令牌。 由于auth令牌存储在用户的浏览器中,并且无法被其他域访问,因此不太可能存在任何安全漏洞。

在此身份验证方案中完全避免了对电子邮件和密码组合的需求。

答案 2 :(得分:0)

大多数网站仅支持使用原始明文密码直接登录,因此您必须获取,存储和提供该密码。而且我永远不会相信你。 您的概念的问题是您需要将密码提供给第三方。解决方案不涉及第三方,例如我的浏览器非常擅长自动存储和填写密码(我的硬盘驱动器也受密码保护)。它们也是许多其他密码钱包应用程序。订阅时,我不会通过您的服务获得任何收益。

在开展此类业务之前,请考虑您将成为第一目标。 Facebook,谷歌对安全性非常偏执,花费大量时间,金钱和精力来保持登录安全。你有相同的资源吗?那你就是一个更好的目标。此外,通过黑客攻击您的服务,他们会立即获得多个帐户,用户密码,还可以查看谁总是重复使用其密码。

答案 3 :(得分:0)

对于使用Eventbrite API,我建议确保所有连接都通过SSL,并使用user_key而不是用户名和密码进行身份验证。

有关Eventbrite API身份验证的详细信息,请访问:http://developer.eventbrite.com/doc/auth/

登录后,用户可以在此处找到他们的user_key:http://www.eventbrite.com/userkeyapi

这样可以防止通过网络拦截用户名和密码信息,或者从本地数据存储中读取信息。