2011-06-09 101 views
4

我正在为Facebook开发画布应用,并且我想阻止用户直接从画布URL访问应用(尽可能地,我意识到这可能不会有可能100%的时间),并强制用户从apps.facebook.com/foo访问应用程序。防止Facebook画布应用被直接访问/在Facebook之外

我正在用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链接等于画布网址。

回答

7

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

额外的检查,你可以做的是使用JavaScript来检查

window == window.top 

哪些应该告诉你,如果你是在一个帧。

+0

谢谢,这是完美的。我只是试图阻止偶然用户访问facebook的iFrame之外的应用程序。谢谢 – 2011-06-09 16:09:44

1

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