13

我目前是第一次在我的网站上实现 Facebook 登录,但我对它的安全性有一些疑问。

我已经有一个包含用户的数据库,并且为每个用户存储了一个电子邮件地址,所以我真的需要检查我从 Facebook 获得的电子邮件地址是否已经存在于我的数据库中,否则我会遇到一些问题重复用户。如果用户已经存在,我只需将来自 Facebook 的数据合并到我网站上的现有帐户中,然后连接用户。否则,我为他创建一个帐户。

但事情是这样的:

  1. Alice 使用电子邮件地址alice@users.com在我的网站上连接,但Alice 没有使用该电子邮件地址在 Facebook 上注册

  2. Bob 使用 Alice 的电子邮件地址alice@users.com在 Facebook 上注册,并使用在任何电话号码上收到的 SMS 验证帐户(我检查过,这是可能的,无需单击通过电子邮件收到的链接即可验证帐户)。我同意 Alice 会在她的电子邮件地址上收到通知,但是这仍然是可能的。

  3. Bob 使用 facebook connect 触发登录我的网站,同时使用 Alice 的电子邮件地址在 Facebook 上连接。

  4. Bob 的 Facebook 帐户是活动的并且经过验证,我必须假设他已经在我的网站上有一个帐户,因为alice@users.com已经在我的数据库中,所以我连接他而不是 Alice,他可以在 Alice 的帐户上使用我的网站。

=> 我在几个网站上尝试过这种情况,只要我知道电子邮件地址,我就可以连接到其他人的帐户(我创建的虚假 Facebook 帐户;))。

有谁知道如何防止这些情况?

4

2 回答 2

10

如果真的 Facebook 不需要确认电子邮件,然后充当 openid 风格的提供者,那这真是令人震惊!但是我想答案已经在您的问题中了-不要链接/合并帐户。或者至少,在没有先自己确认电子邮件的情况下,不要通过 facebook 登录尝试这样做。

您无法更改friendface的功能,因此您需要将facebook connect提供的电子邮件地址视为不受信任的数据。如果使用您网站上已有本机帐户的电子邮件进行 Facebook 连接登录尝试,请自行向他们发送电子邮件确认代码 - 并执行 facebook 未能执行的操作。

另一种选择是,一旦用户登录到本地帐户,您可以允许他们从那里链接 Facebook 帐户,如果他们愿意的话。这还允许您支持在两个站点上注册了不同电子邮件地址的用户的 facebook 登录。

于 2012-05-18T11:57:22.917 回答
1

我认为这不是 facebook 错误/流程。问题在于接受 facebook 登录的网站所使用的算法。

如果该电子邮件地址已在网站中注册,则不应接受 Facebook 登录。它可能称为“facebook 登录”,但不要忘记它确实是站点数据库的新帐户,应该被视为一个。

总之,如果网站使用电子邮件地址作为唯一标识,则不应接受使用相同电子邮件地址的 facebook 登录。

于 2012-05-19T13:29:38.637 回答