2011-06-09 33 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並直接訪問它