更新
这个问题于2013年12月16日通过https://www.facebook.com/whitehat/report/向Facebook报告,Facebook于12月17日回应说该漏洞早已被修复。
我使用尚未验证电子邮件地址的Facebook帐户重新测试了此问题,并使用Grap API Explorer工具时,无法使用Graph API或使用FQL查询获取此帐户的电子邮件地址。
结论:使用Graph API或FQL查询从Facebook获取的电子邮件地址是经过验证的电子邮件。如果帐户尚未验证其电子邮件,则无法获得它。
原始帖子
我正在制作一个具有SSO的Web应用程序,该应用程序提供用户使用Google或Facebook登录。我希望拥有两种类型帐户的用户在我的系统中显示为同一用户,而不管他们使用哪个身份登录。为了实现这一点,我考虑使用电子邮件地址作为标识符,以确定是否应创建新帐户或用户已存在。
为了避免引入任何安全问题,我必须知道电子邮件地址是否已验证并确实属于用户。对于Google而言,userinfo API 可以告诉我电子邮件是否已验证,因此这里没有问题。但是,在Facebook Graph API中,我找不到类似的内容。有没有可能知道在Facebook上的电子邮件地址是否已确认?
我知道有一个“verified”字段,但那只能告诉我账户是否已验证,而不能确定电子邮件地址是否已确认。
起初看起来,您只能使用Graph API来访问已确认电子邮件地址的帐户。如果地址未经确认,我会收到错误提示,要求我先确认电子邮件地址,然后才能登录到任何第三方网站。
然而,这似乎并不适用于所有账户。在某些情况下,即使您没有确认的电子邮件地址,也有可能访问Facebook的所有部分。其中一个例子是当您使用@myopera.com邮箱注册时。
当您使用@myopera.com电子邮件地址注册Facebook时,提交注册表格后会收到一条消息,提示您的帐户已被暂时锁定。为了继续操作,您需要提供电话号码以验证您的帐户,并“使Facebook保持安全和免受垃圾邮件侵扰”(抱歉屏幕截图中是瑞典语,这是在我能进入Facebook并更改语言为英语之前)。
当您提供电话号码时,您已经登录,Facebook不会再提示您验证电子邮件地址。
唯一能看到您的电子邮件地址尚未得到验证的地方是设置页面:
verified
字段返回true,因为我已经通过添加电话号码验证了该帐户。因此,我显然不能相信从Facebook获得的电子邮件地址真正属于拥有Facebook帐户的用户。是否有其他方法可以知道电子邮件地址是否已验证,或者如果我想将其用于识别用户,是否必须自行验证?