0

我有一个基于 PHP 的投票应用程序,它需要 Facebook 登录(使用 PHP SDK)。您需要连接您的 Facebook 帐户才能投票。我们决定使用 Facebook 登录来防止投票欺诈。

使用 Facebook 帐户登录后,会发生以下情况:

  • 登录页面包含隐藏变量——userId、accessToken、姓名、电子邮件、性别、位置、家乡和指向用户个人资料的链接——所有这些都是从 Facebook 登录返回的。
  • 用户在投票中选择一个选项,然后应用程序会记录他的选择以及他的身份详细信息(在第一点中列出)。

现在,问题就在这里。我可以用虚假的身份信息模拟 HTTP 请求,但应用程序仍然认为这是一个合法请求,因此记录了投票。因此,有人可以设置一个脚本来生成随机识别详细信息,通过 HTTP 请求发送它们,最终导致大量欺诈选票。

也许,在投票结束后,我们可以使用配置文件 URL 进行测试,以查看配置文件是否存在,但这里有两个问题:

  • 入侵者可以使用有效用户配置文件 URL 列表来创建欺诈投票。如果他这样做了,我们不知道投票是否是欺诈。
  • 防止欺诈投票不是比以后整理更好的主意吗?

那么,有没有办法只允许通过应用程序进行合法登录?类似于记录投票前的测试。

我想,验证码可以提供帮助,但这会干扰我们希望用户拥有的快速投票体验。

谢谢你!

4

1 回答 1

2

把这些东西放在表格中,什么都不做不是做到这一点的方法。

这应该如何工作:

  1. 用户通过 FB 进行身份验证。
  2. 用于$uid = $facebook->getUser();获取刚刚登录的用户的userid,如果为0,则登录失败。
  3. 将 uid 存储在用户的会话中。
  4. 让他们投票。
  5. 当投票进入时,将 uid 拉出会话。确保它不为零,确保他们之前没有投票(如果这是一个限制)并添加他们的投票。

编辑
由于我不完全了解 FB API 可用的各种方法,因此我将在此问题上遵从@Igy(请参阅他关于检索访问令牌以验证帐户的评论)。不过,我不知道用户必须具备什么能力才能伪造 API 返回的帐户 ID。

于 2013-01-04T19:11:06.587 回答