Php 使用Facebook Connect和HTTP请求闯入应用程序

Php 使用Facebook Connect和HTTP请求闯入应用程序,php,security,facebook-apps,Php,Security,Facebook Apps,我有一个基于PHP的投票应用程序,它需要Facebook登录(使用PHPSDK)。你需要连接你的Facebook帐户才能投票。我们决定使用Facebook登录来防止选举欺诈 使用Facebook帐户登录后,会发生以下情况: 登录页面有隐藏变量-用户ID、accessToken、姓名、电子邮件、性别、位置、家乡和用户配置文件链接-所有这些都是从Facebook登录返回的 用户在投票中选择一个选项,然后应用程序记录他的选择以及他的身份详细信息(在第一点中列出) 现在,问题就在这里。我可以模拟一个

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

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

  • 登录页面有隐藏变量-用户ID、accessToken、姓名、电子邮件、性别、位置、家乡和用户配置文件链接-所有这些都是从Facebook登录返回的
  • 用户在投票中选择一个选项,然后应用程序记录他的选择以及他的身份详细信息(在第一点中列出)
现在,问题就在这里。我可以模拟一个带有虚假身份信息的HTTP请求,应用程序仍然认为这是一个合法的请求,因此记录了投票结果。因此,有人可以设置一个脚本来生成随机身份详细信息,通过HTTP请求发送这些信息,最终导致大量欺诈投票

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

  • 入侵者可能使用有效的用户配置文件URL列表来创建欺诈投票。如果他这样做了,我们就不知道投票是否有欺诈行为
  • 防止舞弊投票不是比事后清理好吗
那么,有没有办法只允许通过应用程序合法登录?类似于记录投票前的测试

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


谢谢大家!

把这些东西放到表单中,而不做其他事情不是这样做的

这应该如何工作:

  • 用户通过FB进行身份验证
  • 您可以使用
    $uid=$facebook->getUser()
    获取刚刚登录的用户的用户ID。如果为0,则登录失败
  • 将uid存储在用户会话中
  • 让他们投票吧
  • 当投票进入时,将uid退出会话。确保它不为零,确保他们以前没有投票(如果这是一个限制),并添加他们的投票
  • 编辑

    由于我不完全了解FBAPI提供的各种方法,因此我将在这方面听从@Igy的意见(参见他关于检索访问令牌以验证帐户的评论)。不过,我不知道用户必须具备什么能力才能伪造API返回的帐户id。

    为什么不允许每个facebook用户id只允许一次投票,并让用户授权您的应用,这样您就可以获得一个访问令牌,用于验证用户ID?该应用已经允许每个用户ID进行一票表决,并且需要用户授权该应用。你的最后一部分解决了问题。我可以测试访问令牌,看看用户是否有效。非常感谢你!那帮我省去了很多麻烦!顺便问一下,将userID和访问令牌存储在隐藏变量中而不是会话变量中会是一个安全问题吗?用户(入侵者)也可以访问会话变量。非常感谢。是的,这个应用程序就像你上面提到的那样工作@伊吉的评论解决了这个问题。我没有意识到我可以使用访问令牌测试用户的有效性。非常感谢您抽出时间回答。非常感谢。