本篇是當你設計messenger機器人時,驗證FB messenger連線到我們的server (webhook)時,確認是FB傳來的,防止駭客來搗蛋。
驗證 Webhook 事件這項 HTTP 要求將包含 X-Hub-Signature 標頭,其中包含要求承載的 SHA1 簽章,所使用的密鑰為應用程式密鑰,開頭則是 sha1=。您的回呼端點可以檢查這個簽章,以驗證承載的完整性和原始來源。請注意,系統會根據承載的逸出 Unicode 版本進行計算,並以小寫十六進位數字表示。例如,字串 äöå 會逸出為 \u00e4\u00f6\u00e5。計算也會將 / 逸出為 \/、< 逸出為 \u003C、% 逸出為 \u0025,並將 @ 逸出為 \u0040。如果您只是根據已解碼的位元組計算,將會產生不同的簽章。
方法是抓取header中的X-Hub-Signature,並和自己計算的hash值比對是否一樣,hash計算方法是以App secret key當金鑰,用SHA1法,hash傳來的JSON內容。
以下的PHP範例程式,示範如何比對X-Hub-Signature,"" 請換成你的Facebook APP的AppSecret金鑰。
$raw = file_get_contents('php://input'); $sha1 = 'sha1='.hash_hmac('sha1', $raw ,); if($_SERVER['HTTP_X_HUB_SIGNATURE'] == $sha1){ echo("OK" ); }else{ echo("Not OK" ); }
沒有留言:
張貼留言