用户登录其他人的帐户

时间:2011-09-09 10:34:52

标签: php facebook

我有一个获取Facebook用户信息的脚本(见下文)。

我在测试期间遇到的问题是用户最终可能会登录其他人的帐户。这显然是不可取的。

这种情况发生在if( $testuser != null )位,其中某些代码会绕过用户名+密码阶段挂钩到网站的登录系统,并根据他们的电子邮件地址登录。

我的猜测是,几个月前我修复的支付系统发生了类似情况。简而言之,如果两个人访问同一页面,他们最终都可以从交易中受益。这是通过从支付服务向回调添加id来解决的。在目前的情况下,我不确定如何实现,但我要说在用户登录之前需要添加一个额外的条件。

您认为发生了什么以及适当/安全的解决方案是什么?

$token_url = "https://graph.facebook.com/oauth/access_token?"
       . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
       . "&client_secret=" . $app_secret . "&code=" . $code;

$response = file_get_contents($token_url);
$params = null;
parse_str($response, $params);

$graph_url = "https://graph.facebook.com/me?access_token=" . $params['access_token'];

$testuser = json_decode(file_get_contents($graph_url));

if( $testuser != null ){
    // Login code goes here
    $id = get_userid_by_email( $testuser->email ); // Use email as key as unique

    $user = new User($db);

    $user->signin_by_id( (int) $id );
    $user->connect();
}

1 个答案:

答案 0 :(得分:1)

是的,请检查get_userid_by_email中的数据库调用是否存在可能返回无效信息的潜在漏洞。

此外,您需要确保$ testuser有效。仅仅因为它解码数据并不意味着身份验证是正确的,因为Facebook可能返回了400错误代码。确保检查数据中的错误索引。