2012-04-19 7 views
1

同名の質問はほとんどありませんが、私の心に何があるのか​​を尋ねるものはありません。そこで、FB js sdkをapp idだけで初期化します。 Facebookの初期化ソースコードを見れば、他のWebサイトのアプリIDを知ることは簡単です。ハッカーが他のアプリIDを使用してFB JS SDKを初期化し、ユーザーアクセストークンを取得しようとする可能性があると考えるかもしれません。しかし、Facebookはそのようなものを許可していません。 Facebook Developer Appsページのsite urlプロパティで指定したのと同じドメインからjs sdkをロードする必要があります。ですから、問題は、どのような呼び出しが適切なクライアントから来るのか、彼らがjsonpをどのように知っていますか?彼らが望むように人々がjavascriptをコピーし修正することができるので、クライアント側のチェックでは安全ではありません。したがって、サーバ側のチェックが必要です。私は「リファラーチェック」としか考えられませんが、安全な方法とはみなされないと感じています。これが唯一の憶測ですのでFacebook Javascript SDKセキュリティ。 Facebookは、アプリケーション設定で指定された正しいドメインにJS SDKがロードされていることをどのように確認しますか?

答えて

1

まあ、私は... httpリクエストを作成するときに、SDKにあなたがしている、そこからURLを読み込むときHTTP referer headerがそのように添加し、全ての

まず、わからないんだけどリクエストを作成することはリファラーとして追加されます。 Facebookはリクエストの発信元のサーバーをチェックして、アプリの設定の内容と比較することができます。

間違ったドメインにいる場合は、アプリのsdkを読み込むだけでエラーが発生しないため、リクエスト時にこのヘッダーを変更することはもちろん可能です。

アン:あなたは、次のエラーメッセージが表示されます認証ダイアログのポップアップが開きますFB.loginメソッドを実行しようとして例えば、SDKと対話しようとすると、 エラーは発生しますエラーが発生しました。後でもう一度お試しください。

あなたはこれらの2つのクエリ文字列パラメータを気づくでしょう(SDK構造物)は、この認証ダイアログのURLを確認した場合:起源が含まれています

  1. ドメイン= THE_DOMAIN_OF_THE_PAGE
  2. REDIRECT_URI = FACEBOOK_URLを、ドメインとリレーション=オープナー

どうやら(おそらく)起こるのは、ドメインがアプリの設定に対してドメインをチェックするということです。大丈夫なら、ユーザーに認証ダイアログを表示します。プロセスを終了し、redirect_uriにリダイレクトされます。

redirect_uriはポップアップで開くので、同じドメインにある場合はオープナーとしか通信できません。つまり、誰も自分のページに持っていないFacebookのドメインです。

SDK負荷が理由ポップアップウィンドウがIFRAMEバック通信できることから、REDIRECT_URIと同じドメインからロードされたFacebookのJSをロードFB-ルート容器にIFRAMEを追加auth応答で通知します。

iframeが応答を受け取ると、ポップアップが閉じ、iframeはメインページの応答の読み込まれたsdkに通知します。 私はその通信にどの技術を使用しているのかよく分かりませんが、 "iframeとのクロスドメイン通信"でグーグルで情報を見つけることは簡単です。

これは私の見方ですが、わかりません。 実際に何が起こっているのかを知りたい場合は、js sdk @ githubのコードを確認できます。

+0

私の推測では、自分のサーバーもrefererヘッダーをチェックすることになります。それでも、この情報が真実であることを保証するものではありません。すなわち、refererでHTTPリクエストを作成するのが非常に簡単です。 'curl'自体が可能です。 –

関連する問題