2011-07-21 32 views
5

我正在使用Facebook的JavaScript SDK的過程提供用戶登錄功能的網站。Facebook的Javascript SDK的安全

我想要做的就是簡單地獲取登錄用戶的唯一的Facebook ID,然後使用ID將數據放入/從mysql數據庫中獲取以確定哪些數據可用於所述用戶。

但是我並不覺得這是非常安全的。雖然我沒有存儲任何敏感信息,比如信用卡信息等,但我顯然更喜歡它儘可能安全。

我擔心的是,用JavaScript做它的時候,有人可以僞造facebook id,並且只是拉他們想要的東西。

我知道php sdk會爲這個問題提供一個可靠的解決方案,但我喜歡javascript主要是因爲它易於使用,並且我有它的基礎設置(我承認它,我是懶)。

所以,我的問題是:

  1. 這會建立像不安全的,因爲我覺得它可能是什麼?

  2. 有什麼我可以做的,以改善這種系統的安全性,而不是切換到PHP SDK?

謝謝!

+0

你會保存他們的Facebook或與您的網站相關的數據的數據嗎?你是通過SSL來做這件事的嗎? – zachzurn

+0

我敢說使用JavaScript來驗證任何遠程相關的東西是不安全的 - 記住,JavaScript執行客戶端,因此對於所有密集目的,惡意用戶都能夠操縱您接收到的任何輸入,並且可以選擇性地阻止您從運行中獲得的基於JavaScript的驗證。 – uscere90

+0

我唯一要保存的是用戶的uid,用於識別從哪個表中添加/拉取數據以及年齡。沒有使用SSL完成。 – Joshua

回答

4

Facebook ID很難彌補(最多用戶只會知道他們自己)。取決於您在數據庫中存儲的內容(除非您要求延長的權限,否則這些內容不會是用戶無法獲得的任何內容)

如果您擔心用戶嘗試從數據庫獲取信息,請添加一個訪問令牌或簽名請求到每一行,我們和Facebook的ID來獲取數據。這將大大提高安全性。

編輯

有幾次你在哪裏得到來自用戶的簽名的請求:

* A signed_request is passed to Apps on Facebook.com when they are loaded into the Facebook environment 
* A signed_request is passed to any app that has registered an Deauthorized Callback in the Developer App whenever a given user removes the app using the App Dashboard 
* A signed_request is passed to apps that use the Registration Plugin whenever a user successfully registers with their app 

簽名請求將包含一個用戶ID只有在使用已接受的權限,雖然,是如果用戶輸入應用程序並且接受權限(意味着簽名的請求不包含該ID),則不會再次傳遞。由於節省了訪問令牌可能是一個更好的主意。這裏是更多的signed request

另外簽署的請求在url(param =「signed_request」)。我總是通過c#解析它,但我相信你至少可以通過javascript獲得一個javascript

+0

完成了一些閱讀後,理想情況下我想要的是來自Facebook的加密字符串,其中包含用戶uid,然後我可以使用我的fb應用程序的密鑰讀取它。 似乎已簽名的請求完全適合此描述,但我不知道如何根據請求調用其中一個請求?理想的使用JavaScript API。如果有人知道這是否可能,我很想知道。 fb訪問令牌是我可以根據請求找到的東西,但是uid沒有加密,只是它中間的一個字符串。 – Joshua

+0

看編輯 –

+0

只有用戶知道ID的第一個陳述是不正確的。網絡上有很多網站可用來查找ID,因此它們不安全。您必須使用簽名的請求。 – eagle779

1

使用curl來欺騙原點很容易。我想像Facebook有另一種機制來實現這一點。如果你檢查他們的代碼,看起來他們生成一個iframe並傳遞請求。如果我不得不猜測,他們已經將請求設置爲僅由Facebook域創建,並確保iframe只能嵌入到具有白名單域的頁面中。