防止Facebook画布应用程序直接/在Facebook外访问

时间:2011-06-09 15:55:55

标签: php facebook canvas facebook-php-sdk

我正在为facebook开发一个画布应用程序,我想阻止用户直接从画布URL访问应用程序(尽可能地,我意识到这可能在100%的时间内都不可能)并强制用户从apps.facebook.com/foo访问该应用程序。

我正在使用php开发应用程序,我的第一个想法是检查$ _POST数组中的'signed_request',这是从facebook传递到画布应用程序的值,如果此值不存在则发送重定向但似乎这个值只传递一次,当用户点击我的应用程序中的不同链接时,'signed_request'参数不会再次传递。

我是否可以合理地信任'HTTP_REFERER'以验证用户是否正在从http://apps.facebook.com/foo访问应用程序并在HTTP_REFERER不等于该值时重定向用户?

编辑: 我实际上只是注意到在apps.facebook.com/foo上对应用程序的原始请求时,HTTP_REQUEST标头等于'apps.facebook.com/foo',但是当用户单击应用程序中的链接时,HTTP_REQUEST变得相等到画布网址。

2 个答案:

答案 0 :(得分:7)

我建议您check the signed_request parameter如果它有效,请使用PHP会话变量来跟踪这是否是基于Facebook的请求。它不会阻止某人在Facebook上使用您的应用程序,然后直接转到应用程序。

您可以执行的其他检查是使用javascript检查

window == window.top

如果您在框架内,应该告诉您。

答案 1 :(得分:1)

使用cURL,您可以真正模拟任何请求。所以没有你永远不能完全安全检查REFERER。但在某种程度上,它确实可以防止人们只是复制网址并直接访问它