2
我有一个脚本,获取的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();
}
从FB读取部分看起来不错,我 - 我想看看'get_userid_by_email()'和'signin_by_id()',我猜。您的应用是否请求“获取电子邮件”权限?如果'$ testuser-> email =='''会发生什么?你究竟传递了哪些funcs?这是你认为你经过的吗? – Piskvor
'get_userid_by_email'查询数据库中的id。如果'$ email'为空,它将返回一个-1,这又会导致一个检查来中断登录过程。 'signin_by_id'是实际用于登录的方法。它设置会话和cookie并初始化'User'实例的连接和id变量。该应用程序具有获取电子邮件许可权:'&scope = email'。 –
好吧,如果它看似“随机”发生,我会开始记录'get_userid_by_email()'和'signin_by_id()'的执行。编写一个日志文件,说明它们在输入中接收的参数是什么以及输出是什么。希望这会给你带来一个可重现的问题。 您的'$ code'一代也有可能出现问题,并且正在被其他会话污染。我相信ID和电子邮件在数据库中是唯一的? – Naltharial