2

Facebookのサーバー側のログインプロセスでは、サーバーはFacebookへのリクエスト中に「状態」変数を提供する必要があると述べています。これは、Facebookがログインコールバックページに戻ってサーバーが確認するCSRFトークンのように機能します。

しかし、なぜこれが必要なのかわかりません。偽のログインリクエストを受け取った場合でも、ログインリクエストのを使用してFacebookからaccess_tokenを取得する必要があり?code=ます。偽のリクエストはcode正しくないため、正しく機能しません。

さらに、ユーザーはFacebookアプリのリンクを介してサーバーにアクセスできます。?code=Facebookは自動的にリンクにパラメータを追加するので、サーバーはユーザーに自動ログインできますcodeこの紹介によって提供されたものを使用する場合state、とにかく検証するためのパラメーターがなく、Facebookもそれを気にしないようです。

stateオプションですか?それは本当に追加のセキュリティを提供しますか?

4

1 に答える 1

1

stateパラメータはオプションです。あなたのサービスが保持する価値のある情報をそこに置くことができれば、それは追加のセキュリティを提供するかもしれません。通常、このstateパラメーターは、現在のブラウザーウィンドウのセッションの状態に関するデータを保持するために使用されます(Cookieで処理できるセッション全体を処理するデータとは対照的です)。

セキュリティを強化するためにこの機能を使用する例は、次のとおりです。

  1. ユーザーがサイトにアクセスします
  2. あなたのサイトはセッションクッキーを設定します(例Set-Cookie: id=xyzrandomstuff
  3. ユーザーがFacebook認証を行う必要があることを行おうとしています
  4. あなたのサイトは、セッションIDで使用できるCSRFトークンを作成し、それをFacebookログインxyzrandonstuffのパラメーターに入れますstate
  5. ユーザーがFacebookでログインを完了します(これは表示されません)
  6. codeユーザーは、パラメーターを使用してFacebookから戻ってきstateます。
  7. code手順3で開始したアクションを完了する前に、ログインを確認します。サーバーは、CSRFトークンが現在のセッションと一致することを確認します。
于 2013-06-06T08:00:08.157 に答える