2012-02-09 5 views
4

"Facebook에 로그인"으로 첫 번째 애플리케이션을 구현하는 데 문제가 있습니다. 사용자는 내 시스템에 등록해야하지만 FB 계정을 연결할 수 있습니다. FB 계정이 연결되면 나는 페이스 북에서 사용자 이메일 주소를 저장한다.facebook API 로그인을 통한 보안

사용자가 "페이스 북으로 로그인"을 클릭하면 (페이스 북에 이미 로그인되어있는 것으로 간주 함) 프로필 이메일을 가져 와서 서버로 보내 전자 메일과 연결된 사용자가 있는지 확인합니다. 그러한 사용자가 존재하면 해당 사용자에 대한 세션을 만듭니다.

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

관련 문제