【问题标题】:Can Facebook Omniauth email address be securely trusted?Facebook Omniauth 电子邮件地址是否可以安全信任?
【发布时间】:2013-11-20 23:28:01
【问题描述】:

我有一个简单的使用电子邮件和密码登录的传统设计用户身份验证系统。我想用 Facebook 添加登录。我大部分时间都在工作,但我很好奇处理边缘情况的安全隐患。

假设这里发生了这样的事情:

  1. 用户目前未经身份验证,但已有一个电子邮件为“foo@bar.com”的帐户
  2. 用户点击“用 Facebook 登录”,授权从 Facebook 访问
  3. Facebook 回调到我的服务器,显示电子邮件为“foo@bar.com”

此时我们有一个没有附加 Facebook 凭据的用户帐户,我们有一个没有附加用户的 Facebook 凭据,但他们都有相同的电子邮件。

所以此时有两种选择:

  1. 向用户抱怨该电子邮件地址已被其他用户使用,并且要将 Facebook 添加到他们的帐户,他们必须首先登录(使用他们的密码)并关联 Facebook 帐户。
  2. 或者只需将他们登录到具有相同电子邮件的帐户,然后将 facebook 凭据附加到他们的帐户。

首选选项 2,因为它对用户来说更容易,但这意味着通过 Facebook 访问以前从未链接过 Facebook 的帐户。如果服务器从 Facebook 获取的电子邮件地址可以被欺骗或以任何方式更改,这将是一个巨大的安全问题。

但我的服务器相信用户对电子邮件是安全的,Facebook 也是如此。但是我可以相信他们之间的交流吗?

【问题讨论】:

  • 我不确定您是否注意到,但我链接到的问题大约在 2 周前更新。显然,Facebook 已经修复了它的错误,因此您只有在已经确认的情况下才会收到用户的电子邮件。由于现在您可以信任该电子邮件,因此我将相应地编辑我的答案。

标签: facebook security devise omniauth


【解决方案1】:

只有在两个服务都确认了电子邮件后,您才能链接帐户。

在您这边,您应该确认用户的电子邮件(使用Devise's Confirmable module)。

在 Facebook 方面,他们应该发送一个 verified_email 字段来确认该帐户的电子邮件地址已得到确认。不幸的是,Facebook 只返回一个verified field,它不仅会受到电子邮件的影响,还会受到短信确认和输入有效信用卡的影响。

但是,似乎只有在确认后才会退回电子邮件。有关更多信息,请参阅this SO question。问题是我找不到证实这一点的官方文档 (this is as close as I could get),因此我建议您自己测试一下,以确保万无一失。如果您确实找到了正确的文档,请不要忘记在此处添加评论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 2019-01-03
    • 2019-06-12
    • 1970-01-01
    相关资源
    最近更新 更多