0

我希望我的 facebook 应用程序只能在 facebook 画布上访问,但不能在我的网站上访问。现在,如果我访问http://mywebdomain.com/facebook/会显示应用程序,但我想将用户重定向到https://apps.facebook/myApp/

我的 facebook 对象是“简单的”,如下所示:

$facebook = new Facebook(array(
'appId'  => 'xxx',
'secret' => 'yyy',
'cookie' => true
));
4

1 回答 1

0

查看 $_SERVER["HTTP_HOST"] 以查看用于访问您的页面的地址,如有必要,请执行 301 重定向到https://apps.facebook/myApp/

if ($_SERVER["HTTP_HOST"] == "Your domain") {
header("HTTP/1.1 301 Moved Permanently"); 
header("Location: https://apps.facebook/myApp/"); 
}
else
{
... your app goes here. 
}
?>

不过,在您实施重定向之前,我将创建一个显示 $_SERVER["HTTP_HOST"] 值的测试页面,然后从 facebook 中直接从您的站点访问代码。如果它们不同,那么你很好。

我会自己测试一下,只是为了安全起见。

编辑

实际上,我刚刚做了一些测试,您需要检查是否存在 $_SERVER["HTTP_ORIGIN"] 。

如果您从 facebook 调用,它将存在,并包含 facebook 链接。如果您来自该网站本身,它就不会存在。

为了更好地了解正在发生的事情,请将此作为您的第一个程序:

<?php
echo "<pre>";
print_r($_SERVER);
echo "</pre>";

这就是我发现 HTTP_ORIGIN 的方式。

那么你应该将上面的内容替换为:

<?php

if (isset($_SERVER['HTTP_ORIGIN']) && $_SERVER['HTTP_ORGIN'] === "https://apps.facebook.com"){
... your app.
}
else
{
header("HTTP/1.1 301 Moved Permanently"); 
header("Location: https://apps.facebook/myApp/");
}

作为 HTTP_ORIGIN 的替代方案,您可以使用 HTTP_REFERER,它应该包含完整的 url 而不仅仅是 facebook 组件。否则,其他人可以设置一个 facebook 应用程序并链接到您的内容。

于 2013-01-21T19:29:59.810 回答