13

私は現在、自分の Web サイトに初めて Facebook ログインを実装していますが、これがどれほど安全であるかについて疑問があります。

私はすでにユーザーのデータベースを持っており、ユーザーごとにメールアドレスを保存しているため、Facebook から取得したメールアドレスがデータベースに既に存在するかどうかを確認する必要があります。そうしないと、いくつかの問題が発生します。重複ユーザー。ユーザーが既に存在する場合は、Facebook からのデータを Web サイトの既存のアカウントにマージするだけで、ユーザーを接続できます。それ以外の場合は、彼のアカウントを作成します。

しかし、ここに問題があります:

  1. アリスはメールアドレスalice@users.comを使用して私の Web サイトに接続しますが、アリスはそのメールアドレスで Facebook に登録されていません

  2. Bob は Alice のメール アドレスalice@users.comを使用して Facebook に登録し、任意の電話番号で受信した SMS を使用してアカウントを確認します (確認したところ、これは可能です。メールで受信したリンクをクリックしなくてもアカウントを確認できます)。アリスが彼女のメール アドレスに通知されることに同意しますが、それでも可能です。

  3. Bob は、Facebook 接続を使用して私の Web サイトにログインをトリガーし、Alice の電子メール アドレスを使用して Facebook に接続します。

  4. Bob の Facebook アカウントはアクティブで検証済みです。alice@users.comは既に私のデータベースにあるため、彼は既に私の Web サイトにアカウントを持っていると想定する必要があります。そのため、Alice の代わりに Bob を接続すると、彼は Alice のアカウントで私の Web サイトを使用できるようになります。

=> このシナリオをいくつかの Web サイトで試してみたところ、メール アドレスを知っていれば、他の誰かのアカウント (私が作成した偽の Facebook アカウント ;)) に接続できました。

これらの状況を防ぐ方法を知っている人はいますか?

4

2 に答える 2

10

Facebook が電子メールを確認する必要がなく、openid スタイルのプロバイダーとして機能するというのが本当なら、これは衝撃的です! しかし、答えはすでにあなたの質問にあると思います-アカウントをリンク/マージしないでください. または、少なくとも、最初に自分で電子メールを確認せずに、Facebook のログイン試行からログインしないでください。

フレンドフェイスの動作を変更することはできないため、facebook コネクトによって提供されるメール アドレスは信頼できないデータとして扱う必要があります。Facebook 接続のログイン試行が、サイトのネイティブ アカウントを既に持っている電子メールで行われた場合は、自分で電子メールの確認コードを送信して、Facebook が失敗したことを行います。

もう 1 つのオプションは、ユーザーがネイティブ アカウントにログインしたら、必要に応じてそこから Facebook アカウントをリンクできるようにすることです。これにより、2 つのサイトに登録されている別の電子メール アドレスを持つユーザーの facebook ログインをサポートすることもできます。

于 2012-05-18T11:57:22.917 に答える
1

これはFacebookのバグ/フローではないと思います。問題は、Facebook ログインを受け入れるサイトで使用されるアルゴリズムにあります。

その電子メール アドレスが既にサイトに登録されている場合、Facebook ログインは受け入れられません。これは「facebook ログイン」と呼ばれる場合がありますが、実際にはサイト データベースの新しいアカウントであり、1 つのように扱われるべきであることを忘れないでください。

結論として、サイトが電子メール アドレスを一意の識別として使用している場合、同じ電子メール アドレスでの facebook ログインを受け入れるべきではありません。

于 2012-05-19T13:29:38.637 に答える