2012-02-09 2 views
4

У меня есть некоторые проблемы с реализацией моего первого приложения с «Войти в Facebook». Пользователь ДОЛЖЕН быть зарегистрирован в моей системе, но он может связать с ним учетную запись FB. Когда связана учетная запись FB, я просто сохраняю адрес электронной почты пользователя из facebook.Безопасность с API facebook API

Когда пользователь нажимает «login with facebook» (учитывая, что он уже зарегистрирован в facebook), я просто просматриваю его профиль и отправляю его на сервер, чтобы проверить, есть ли у пользователя связанная с ним электронная почта. Если такой пользователь существует, я создаю сеанс для этого пользователя. Это код для захвата электронной почты пользователя и отправить его на сервер:

function login() 
{ 
    FB.api('/me', 
    function (user) 
    {    
     $.ajax(
     { 
      url: "my_ajax_page.php", 
      type: "POST", 
      data: {controller: "MyController", action: "LinkEmail", fbmail: user.email}, 
      success: function (response) 
      { 
       if(response == 1) 
       { 
        alert("Success!"); 
       } 
      }, 
      error: function() 
      { 
       alert("Error"); 
      } 
     } 
     ); 
    } 
    ); 
} 

Существует большой недостаток безопасности при таком подходе, любой желающий может создать скрипт отправки электронной почты в моей системе и это «неправильно» электронная почта будет связана с текущей регистрируемой учетной записью пользователя:

function hacking() 
{ 
    $.ajax(
    { 
     url: "my_ajax_page.php", 
     type: "POST", 
     data: {controller: "MyController", action: "LinkEmail", fbmail: '[email protected]'}, 
     success: 
     function (response) 
     { 
      if(response == 1) 
      { 
       alert("Success!"); 
      } 
     }, 
     error: function() 
     { 
      alert("Error"); 
     } 
    } 
} 

Каким подходом можно использовать, чтобы сделать его безопасным для входа с FB?

ответ

3

Возможно, вам необходимо отправить signed__request в качестве еще одного параметра для вызова Ajax. Только ваше приложение со своим собственным `app_secret может декодировать signed_request, поэтому, если вы в состоянии его декодировать - это значит, что звонок был инициирован действительным пользователем (зарегистрированным пользователем) Facebook.

Вы можете прочитать больше о подписанных запросов по этой ссылке:
https://developers.facebook.com/docs/authentication/signed_request/

+0

Как я получаю это «signed__request», чтобы отправить его? Есть ли какой-нибудь рабочий пример контекста того, как я его буду использовать? FB api просто показывает, как его декодировать, а не как получить его. – IPValverde

+0

Ссылка, которую я дал, 3 случая, когда подписанные запросы передаются вашему приложению. Вы должны изучить переменную '$ _REQUEST ['signed_request']'. – Lix

+0

Плохо, я понял! Благодаря! – IPValverde

Смежные вопросы