7

ユーザーのログインに完全に機能する PHP SDK getLoginUrl () 関数を使用しています。ユーザーがページにリダイレクトされると、URL は 2 つの形式になります。次のリンク サブセクション 3 を参照してください。.facebook.com/docs/authentication/server-side/

戻り URL の一部は ?state= 値です。この値は、クロス サイト リクエスト フォージェリを防止するために使用することになっています: http://developers.facebook.com/docs/reference/dialogs/oauth/

ただし、getLoginUrl() メソッドを使用すると、パラメーターの 1 つではないため、状態値を設定することはできません: http://developers.facebook.com/docs/reference/php/facebook-getLoginUrl/

では、状態値を利用してユーザーを facebook にログインさせ、CSRF を防ぐにはどうすればよいでしょうか?

4

1 に答える 1

3

では、状態値を利用してユーザーを facebook にログインさせ、CSRF を防ぐにはどうすればよいでしょうか?

これは、 Facebook PHP SDKによって自動的に処理されます。Facebook に対して独自のAPI 呼び出しを記述しようとしている場合は、Facebook のドキュメントstateに従って (必要に応じて) 手動で送信する必要があります。OAuth

でログイン URL を作成するとBaseFacebook::getLoginUrl()、関数が最初に行うことは CSRF トークンの状態1を確立することです。これにより、PHP の core を使用してハッシュが作成mt_rand()され、値がセッション変数として保存されますuniqid()md5()

ユーザーがページにリダイレクトされると、FBSDK は、送信された値がセッションstateの値と一致するかどうかを確認します。state値が実際に一致する場合、stateはオブジェクトとセッションからクリアされるFacebookため、後続のすべてのgetLoginUrl()リクエストは新しいstate変数を取得します。2

理論的には、オブジェクトを構築する前にセッション変数に書き込むことで、 FBSDKstateで独自の値を使用できます。fb_<your_app_id>_stateFacebookBaseFacebookestablishCSRFTokenState()state

しかし、それはおそらく必要以上に複雑になるでしょう。

 


  1. 見るBaseFacebook::establishCSRFTokenState()
  2. 見るBaseFacebook::getCode()
于 2012-11-20T08:30:11.460 に答える