2016-04-14 8 views
1

Facebookのメッセンジャープラットフォームでチャットボットを開発して遊んでいます。私はFacebookの文書を調べて、webhookをランダムな呼び出しから保護する方法を見つけることができませんでした。Facebookのチャットボットウェブフックを保護するベストプラクティスは何ですか?

たとえば、ユーザーが自分のボットで詰め物を購入できる場合、自分のuserIdを知っている攻撃者は、自分のwebhookに電話をかけて不正な発注を開始する可能性があります。

私はこれを保護する方法についていくつかのアイデアを持っています。

1)mybookからfacebookからの呼び出しのみを許可する。
2)ポストバックコールでCSRFトークンのようなものを に作成します。

+0

こんにちは、どのようにメッセンジャーアプリの設定ページにアクセスしましたか?アプリの設定ページで[メッセンジャー]タブをクリックすると、空白のページが表示されます。 –

+0

私はそれを正確にやったのを覚えていませんが、Webhookと選択されたメッセージを設定していないと空白を表示していると思います。この[guide](https://developers.facebook.com/docs/messenger-platform/quickstart)に従ってください – nate

+0

私はそれに従っていました。ポイント2:セットアップWebhookで、それは言う: "あなたが追加したばかりの"メッセンジャー "製品をクリックしてください。私は最初に製品を追加することができません。 –

答えて

5

は、Facebookはもちろん、すでにお使いのコールバックURLへの要求は(他のすべてがちょうど彼らの一部に過失だろう)本物であれば、あなたがチェックすることが可能な仕組みを実装しています - https://developers.facebook.com/docs/graph-api/webhooks#receiveupdates次を参照してください。

HTTPリクエストをX-Hub-Signatureヘッダーが含まれます。このヘッダーには、リクエストのペイロードのSHA1シグネチャが含まれています(アプリのシークレットをキーに使用し、接頭辞はsha1=)。あなたのコールバックエンドポイントは

は小文字進数字で、ユニコードペイロードのバージョンを免れた上で計算が行われていることに注意してくださいペイロードの完全性と起源を検証するために、この署名を検証することができます。デコードされたバイトに対して計算するだけで、別のシグニチャになります。たとえば、文字列äöå\u00e4\u00f6\u00e5にエスケープする必要があります。

+0

クール!私はこれを調べます。ありがとう! – nate

+0

@nateこれを行う方法を見つけましたか?私はFacebookが送信しているものと一致するように自分の署名を得ることができない。 – Talon876

+0

@CBroeはGETリクエストとともに送信されるだけでなく、X-Hub-Signatureですか? HerokuとParseのコード(例では)を見ると、POST要求は未確認のままです。ネイトが尋ねるように、これはどのようにしてユーザーがユーザーであることを阻止するのでしょうか? – forallepsilon

関連する問題