幾乎所有圖形 API 呼叫都需要存取權杖。惡意開發人員可以竊取存取權杖,並使用它們從您的應用程式傳送垃圾訊息。Facebook 的自動系統可偵測此狀況,但您可以向 API 要求新增額外參數來協助我們保護您的應用程式。本文內容將說明做法。
本文介紹 Facebook 所提供可讓您用於提升應用程式安全性的幾種方法。
本文內容:
appsecret_proof
驗證圖形 API 呼叫圖形 API 呼叫可以從用戶端或代表用戶端的伺服器發出。透過新增名為 appsecret_proof
的參數,可以更好地保護來自伺服器的呼叫。
存取權杖屬於可攜式。取得 Facebook SDK 在用戶端上產生的存取權杖,將其傳送至伺服器,然後代表用戶端從該伺服器發出呼叫,這是有可能發生的。存取權杖也可能遭某人電腦上的惡意軟體或中間人攻擊的惡意軟體竊取。然後,某人就可以在完全不同於用戶端和伺服器的系統上使用該存取權杖,進而產生垃圾訊息或竊取資料。
您可以防止這種情況發生,做法是將 appsecret_proof
參數新增至來自伺服器的每個 API 呼叫,並啟用該設定在所有呼叫中要求證明。這樣可以防止心懷不軌的人從他們的伺服器使用您的存取權杖發出 API 呼叫。如果您使用官方 PHP SDK,則會自動新增 appsecret_proof 參數。
應用程式密鑰證明是存取權杖的 sha256 雜湊值,使用應用程式密鑰當作產生雜湊值的密鑰。以 PHP 撰寫的呼叫看起來像這樣:
$appsecret_proof= hash_hmac('sha256', $access_token, $app_secret);
將結果當作 appsecret_proof
參數加入每一個發出的呼叫:
curl \ -F 'access_token=<access_token>' \ -F 'appsecret_proof=<app secret proof>' \ -F 'batch=[{"method":"GET", "relative_url":"me"},{"method":"GET", "relative_url":"me/friends?limit=50"}]' \ https://graph.facebook.com
在應用程式設定的 Advanced
區塊中,可以要求使用 appsecret_proof
。啟用此設定後,我們將只允許包含 appsecret_proof
的 API 呼叫。
一旦變更該設定,攻擊者若沒有存取應用程式密鑰,將無法使用竊取的存取權杖。