Предотвратить прямой доступ к приложению facebook canvas / за пределами Facebook - PullRequest
4 голосов
/ 09 июня 2011

Я разрабатываю приложение Canvas для Facebook и хочу запретить пользователям доступ к приложению напрямую с URL-адреса Canvas (насколько это возможно, я понимаю, что это может быть невозможно в 100% случаев) и заставляю пользователей получить доступ к приложению из apps.facebook.com/foo.

Я занимаюсь разработкой приложения с помощью php, и моей первой мыслью было проверить массив $ _POST на «signature_request», то есть значение, переданное из facebook в приложение canvas, и отправить перенаправление, если этого значения не было. но, похоже, это значение передается только один раз, и когда пользователи нажимают разные ссылки в моем приложении, параметр Signed_request больше не передается.

Могу ли я разумно доверять HTTP_REFERER для проверки того, что пользователи обращаются к приложению с http://apps.facebook.com/foo, и перенаправлять пользователей, когда HTTP_REFERER не равен этому значению?

EDIT: На самом деле я только что заметил, что в исходном запросе приложения на apps.facebook.com/foo заголовок HTTP_REQUEST равен «apps.facebook.com/foo», но когда пользователь щелкает ссылку в приложении, HTTP_REQUEST становится равным на холст URL.

Ответы [ 2 ]

7 голосов
/ 09 июня 2011

Я бы порекомендовал вам проверить параметр signature_request и, если он действителен, использовать переменную сеанса PHP, чтобы отслеживать, является ли это запрос на основе Facebook. Однако это не помешает кому-то сначала использовать ваше приложение в Facebook, а затем напрямую переходить в приложение.

Дополнительная проверка, которую вы могли бы сделать, это использовать javascript для проверки

window == window.top

Что должно сказать вам, если вы в кадре или нет.

1 голос
/ 09 июня 2011

Используя cURL, вы можете смоделировать любой запрос. Так что нет, вы никогда не можете быть полностью в безопасности, проверяя REFERER. Но в некоторой степени это дает вам защиту от людей, которые просто копируют URL и получают к нему прямой доступ

...