2011-10-14 5 views
1

간단 할 것 같았습니다. 그러나 재발견 검색 결과를 찾지 못했습니다.PHP를 사용하여 Facebook iframe에 페이지가로드되었는지 확인할 수 있습니까?

iframe의 내 서버에서 페이지를로드하는 내 Facebook 페이지에 페이지 탭이 있습니다. 페이스 북이 요청한 경우에만 페이지를 제공하고 싶습니다.

사용자 에이전트를 살펴 봤지만 작동하지 않습니다. PHP는 적어도 ... 제 생각에는.

자바 스크립트로 리디렉션해야 할 필요가 있지만 그다지 잘못되었습니다.

이상적으로 다음과 같이 보일 것입니다.

<?php 
... 
if (! $is_facebook) 
{ 
    header("HTTP/1.1 404 Not Found"); 
} 
?> 
+0

브라우저가 페이스 북이 아니라 가능성이 가장 높습니다. – hakre

+1

이후로 돌아와서 @Floyd가 말한 것처럼 'signed_request'가 있다는 것을 깨닫게되고 사용자가 페이지를 좋아하는지 여부를 알 수 있습니다. 그래서 기본적으로'signed_request'가 없다면 페이지를 제공하지 마십시오. http://developers.facebook.com/docs/appsonfacebook/pagetabs/ – JDavis

+1

또한 리디렉션이 있으면 'signed_request'를 얻을 수 없습니다. 내가 'signed_request'를 얻지 못하는 이유는 모든 비보안 요청을 보안 연결 요청으로 리디렉션했기 때문입니다. 따라서 페이지 탭의 보안되지 않은 URL이 리디렉션되었습니다. 실제로 상태 코드 301 인 'signed_request'를 찾았습니다. – JDavis

답변

2

는 완전히 신뢰할 수 없습니다를 확인하고 싶지 않아요. 많은 보안이 필요하지 않다면 그 존재를 확인하는 것으로 충분할 것입니다. 좀 더 확실한 것이 필요하다면, 페이스 북에서 온 것인지를 확인하기 위해 디코드 할 수 있습니다.

+0

나는 아이디어가 마음에 들지만,'signed_request'를 얻지는 못했고 응용 프로그램이 아니라 페이지 탭이기 때문에 생각합니다. 그래도 뭔가 다른 것에 유용 할 수 있습니다. – JDavis

+0

아, 어떤 이유로 나는 당신이 페이지 탭에있는 앱에 대해 이야기하고 있다고 생각했습니다. 앱이 아닌 경우 iframe이 Facebook 페이지에 있음을 알 수있는 확실한 방법이 있다고는 생각하지 않습니다. –

+0

나는 이걸로 돌아 왔고'signed_request'가 있음을 깨닫고 사용자가 페이지를 좋아하는지 알 수 있습니다. 그래서 기본적으로'signed_request'가 없다면 페이지를 제공하지 마십시오. http://developers.facebook.com/docs/appsonfacebook/pagetabs/ – JDavis

0

당신은 http://developers.facebook.com/docs/authentication/signed_request/에 설명 된대로 그냥 signed_request 매개 변수를 확인할 수 있습니다 사용자는 리퍼러를 확인하려면 에이전트하지만

$_SERVER['HTTP_REFERER'] 
The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted. 
+0

Facebook이 직접 페이지를 요청했기 때문에 'HTTP_REFERER'가 설정되지 않는다고 생각했습니다. – JDavis

+0

iframe의 'src'와 'HTTP_REFERER'는 동일합니다. – JDavis

관련 문제