我添加了用户使用Facebook帐户登录我网站的功能。当他们在网站上创建帐户时,如果他们使用他们的Facebook信息创建了帐户,我会将他们的用户名和Facebook用户ID添加到我的users
表中(如果使用Facebook则不需要密码)。如果他们在没有Facebook的情况下创建帐户,我会将他们的用户名和密码添加到我的users
表中。
当用户登录时,我显然会验证他们的用户名/密码组合,如果他们没有使用Facebook注册,如果他们使用Facebook注册我通过检查用户是否找到他们的Facebook ID进行验证。 Facebook验证方法似乎并不安全,所以我想检查一下我是否做得对。
这是我的登录代码的精简版本:
$facebook = new Facebook(
array(
'appId' => '123456789',
'secret' => '123456789',
)
);
$fb_user = $facebook->getUser();
if ($fb_user)
{
$fb_user_profile = $facebook->api('/me');
$facebook_id = (int) $fb_user_profile['id'];
if (verify_facebook_user($facebook_id))
{
// a user with facebook_id found in database
// log user in
}
else
{
if (verify_user($username, $password))
{
// username/password combination found in database
// log user in
}
}
要登录用户,只需验证是否在数据库中找到了带有facebook_id的用户就足够了吗?
答案 0 :(得分:2)
是的,你说得对,因为每个Facebook用户都有一个唯一的用户名和密码。
$facebook_id = (int) $fb_user_profile['id'];
所以两个用户都没有可能拥有相同的facebook id,所以你不必担心它。
请参阅 Facebook安全检查表以获取更多信息。
以下列表应被视为使用Facebook登录的所有应用应实现的绝对最低值。其他功能对您的应用来说是独一无二的,您需要始终考虑如何使您的应用尽可能安全。不安全的应用程序将失去其受众的信任,人们将停止使用它们。
- 切勿在客户端或可分解代码中包含App Secret。
- 使用App Secret对所有服务器到服务器的图形API调用进行签名。
- 在客户端使用独特的短期代币。
- 不要相信您的应用实际使用的访问令牌 由您的应用生成。
- 尽可能使用我们的官方SDK。
- 通过锁定您的Facebook应用设置来减少应用的攻击面积。
根据我的经验,如果您使用php sdk
比您已使用的Js-SDK
更安全。