使用Facebook Connect和HTTP请求打破应用程序

时间:2013-01-04 19:05:31

标签: php security facebook-apps

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

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

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

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

也许,在民意调查结束后,我们可以使用个人资料网址进行测试,看看这些个人资料是否存在,但这里有两个问题:

  • 入侵者可以使用有效用户个人资料网址列表来创建欺诈投票。如果他这样做,我们根本不知道投票是否是欺诈。
  • 防止欺诈投票不是一个更好的主意,而不是以后解决?

那么,有没有办法只通过应用程序允许合法登录?在记录投票之前就像测试一样。

我猜,CAPTCHA可以提供帮助,但这会影响我们希望用户拥有的快速投票体验。

谢谢!

1 个答案:

答案 0 :(得分:2)

将这些内容放在表单中,不执行任何其他操作不是这样做的方法。

这应该如何运作:

  1. 用户通过FB验证。
  2. 您使用$uid = $facebook->getUser();获取刚刚登录的用户的用户ID。如果为0,则登录失败。
  3. 将uid存储在用户的会话中。
  4. 让他们投票。
  5. 投票结束后,将uid拉出会话。确保它不为零,确保他们之前没有投票(如果这是限制)并加上投票。
  6. 修改
    由于我不完全了解FB API提供的各种方法,因此我会推迟@Igy(请参阅他关于检索访问令牌以验证帐户的评论)。但是,我不知道用户能够伪造API返回的帐户ID的能力。