0

Facebookログインを取得するPHP上に構築された投票アプリがあります(PHP SDKを使用)。投票するには、Facebook アカウントに接続する必要があります。不正投票を防ぐため、Facebook ログインを使用することにしました。

Facebook アカウントでログインすると、次のようになります。

  • ログイン ページには、userId、accessToken、name、email、gender、location、hometown、およびユーザー プロファイルへのリンクという非表示の変数があります。これらはすべて、Facebook ログインから返されます。
  • ユーザーがアンケートでオプションを選択すると、アプリはユーザーの選択を ID の詳細 (最初のポイントにリストされている) と共に記録します。

さて、ここに問題があります。偽の ID の詳細を使用して HTTP 要求をシミュレートできますが、アプリはそれが正当な要求であると見なし、投票を記録します。そのため、誰かがスクリプトを設定してランダムな ID の詳細を生成し、それらを HTTP リクエストで送信して、最終的に多くの不正投票につながる可能性があります。

おそらく、投票が終了した後、プロファイルの URL をテストして、プロファイルが存在するかどうかを確認できますが、ここでも 2 つの問題があります。

  • 侵入者は、有効なユーザー プロファイル URL のリストを使用して不正投票を作成する可能性があります。もしそうなら、投票が不正であったかどうかを確認することはできません.
  • 後で整理するよりも、不正投票を防止する方がよい考えではないでしょうか?

では、アプリを介した正当なログインのみを許可する方法はありますか? 投票を記録する前のテストのようなもの。

CAPTCHA は役立つと思いますが、ユーザーに提供したい迅速な投票エクスペリエンスを妨げることになります。

ありがとう!

4

1 に答える 1

2

そのようなものをフォームに入れ、他に何もしないことは、これを行う方法ではありません.

これがどのように機能するか:

  1. ユーザーは FB で認証されます。
  2. $uid = $facebook->getUser();ログインしたばかりのユーザーのユーザー ID を取得するために使用します。0 の場合、ログインは失敗しています。
  3. ユーザーのセッションに uid を保存します。
  4. 彼らに投票させてください。
  5. 投票が入ったら、セッションから uid を引き出します。ゼロ以外であることを確認し、以前に投票したことがないことを確認し (それが制限である場合)、投票を追加します。

EDIT
私はFB APIで利用可能なさまざまな方法を完全には認識していないため、これについては@Igyに任せます(アカウントを確認するためのアクセストークンの取得に関する彼のコメントを参照してください). ただし、ユーザーがAPIによって返されたアカウントIDを偽造できるようにするために必要な機能はわかりません。

于 2013-01-04T19:11:06.587 に答える