2011-09-09 18 views
2

Facebookのユーザー情報を取得するスクリプトがあります(下記参照)。他のユーザーのアカウントにログインしたユーザー

テスト中に遭遇した問題は、ユーザーが他のユーザーのアカウントにログインしてしまいます。これは明らかに望ましくない。

これは、if($testuser != null)と表示されているビットで、ユーザー名+パスワードフェーズを迂回してWebサイトのログインシステムにフックし、電子メールアドレスに従って人にログインする場合に発生します。

私の推測では、数ヶ月前に修正された支払いシステムにも同様のことが起こっていると思います。要するに、2人の人が同じページを訪れていれば、どちらもトランザクションの恩恵を受ける可能性があります。これは、支払いサービスからのコールバックにIDを追加することで解決されました。現在のケースでは、どのように実装できるのか分かりませんが、ユーザがログインする前に余分な条件を追加する必要があると言います。

あなたは何が起こっていると思いますか、安全な修正?

+0

FBから読み込んだ部分は大丈夫です。私は 'get_userid_by_email()'と 'signin_by_id()'を見ています。あなたのアプリは「電子メールを受け取る」許可を要求していますか? '$ testuser-> email == '' 'ならばどうなりますか?まさにあなたはその機能に何を伝えていますか?あなたはあなたが過ごしていると思いますか? – Piskvor

+0

'get_userid_by_email'はデータベースに対してIDを問い合わせます。 '$ email'が空であれば-1を返し、それはログイン手続きを中断させるチェックを引き起こします。 'signin_by_id'はログインに実際に使用されるメソッドです。セッションとクッキーを設定し、' User'インスタンスの接続変数とid変数を初期化します。アプリケーションはget email permissionを持っています: '&scope = email'。 –

+1

まあ、それが一見「ランダム」に見える場合、私は 'get_userid_by_email()'と 'signin_by_id()'の実行を記録し始めます。入力時に受け取ったパラメータと出力が何であるかのログファイルを作成します。うまくいけばそれはあなたに再現性のある問題をもたらすでしょう。 あなたの世代の '$ code'に間違いがあり、それが他のセッションで汚染されている可能性もあります。私はIDと電子メールがデータベースで一意であると信じていますか? – Naltharial

答えて

1

はい無効な情報を返す可能性のある穴がある場合は、get_userid_by_emailのデータベース呼び出しを確認してください。

また、$ testuserが有効であることを確認する必要があります。データをデコードしただけでも、フェイスブックが400エラーコードを返す可能性があるため、認証が正しいことを意味するわけではありません。データのエラーインデックスを確認してください。

関連する問題