从工作应用程序上的签名请求重定向循环

时间:2011-12-30 22:40:50

标签: php facebook facebook-page

过去两周我使用PHP SDK在页面选项卡中有一个有用的应用程序,大约一小时前,应用程序在检查页面是否被喜欢时开始执行重定向循环。

奇怪的是,我能够很好地打印已解析的签名请求数组,但是在检查它的条件之前,它就失败了。 (上面的1行不会打印数组)。

如果我禁用此检查,我会被重定向到真正的应用程序URL(我的主机),而不是应用程序URL或页面选项卡。

以下是我用来解析和检查签名请求的代码:

$secret = "xxxxxxxxxxxxxxxx";
// parse the signed request
$decodedSignedRequest = parse_signed_request_outside($_REQUEST['signed_request'], $secret);

// check if the request contains the page liked node
if (!isset($decodedSignedRequest['page']['liked'])) {
header("location: http://www.facebook.com/pagename?sk=app_xxxxxxxxxxxxxx");
        exit();
}

// signed request parser helper functions
function parse_signed_request_outside($signed_request, $secret) {
        list($encoded_sig, $payload) = explode('.', $signed_request, 2);

        // decode the data
        $sig = base64_url_decode_outside($encoded_sig);
        $data = json_decode(base64_url_decode_outside($payload), true);

        if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
            error_log('Unknown algorithm. Expected HMAC-SHA256');
            return null;
        }

        // check sig
        $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
        if ($sig !== $expected_sig) {
            error_log('Bad Signed JSON signature!');
            return null;
        }

        return $data;
    }

    function base64_url_decode_outside($input) {
        return base64_decode(strtr($input, '-_', '+/'));
    }

很少有事情需要注意:

禁用Mod_Rewrite。

标题“hack”正在页面顶部发送

header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');

这是由Facebook错误引起的吗?有办法解决它吗?

谢谢

0 个答案:

没有答案