2012-02-09 140 views
4

我遇到了一些問題,實施我的第一個應用程序與「登錄Facebook」。 用戶必須在我的系統中註冊,但他可以將FB賬戶關聯到它。當一個FB帳戶關聯時,我只保存來自Facebook的用戶電子郵件地址。安全與Facebook API登錄

當用戶點擊「使用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 2012-02-09 13:06:06

+0

我提供的鏈接詳細說明了3個簽名請求時的情況傳遞給您的應用程序。你應該檢查'$ _REQUEST ['signed_request']'變量。 – Lix 2012-02-09 13:09:42

+0

我的不好,我明白了!謝謝! – IPValverde 2012-02-09 14:22:09