4

我正在为 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变得等于画布 url。

4

2 回答 2

7

我建议您检查 signed_request 参数,如果它有效,请使用 PHP 会话变量来跟踪这是否是基于 Facebook 的请求。但是,它不会阻止某人先在 Facebook 上使用您的应用程序,然后再直接访问该应用程序。

您可以做的另一项检查是使用 javascript 来检查

window == window.top

哪个应该告诉您您是否在框架中。

于 2011-06-09T16:03:04.647 回答
1

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

于 2011-06-09T16:00:52.587 回答