如何安全地从仅使用Facebook登录的应用程序提交分数?

时间:2017-03-15 18:59:49

标签: php api security facebook-graph-api api-design

我们的Android应用只有facebook登录

这是服务器中发生的事情:

使用Facebook的正文中的用户访问令牌发送POST请求时,会创建用户。

每当用户通过POST请求创建时,都会生成api令牌并作为响应发送,如下所示:

{"message":"User Successfully Created","api_token":"ACITyBKf0jKrfqOFumTMcaEEJ8jU151crRdESMPmBj8zbeENslULHfNXlKeo"}

我这样做是因为服务器中生成的 api令牌存储在Android应用的本地存储中,需要发出其他请求。

现在,如果用户已存在于服务器中,则响应将为

{"message":"User Already Exists!!","api_token":"ACITyBKf0jKrfqOFumTMcaEEJ8jU151crRdESMPmBj8zbeENslULHfNXlKeo"}

这是用户删除应用程序并再次安装。

现在,要提交分数,将发送PATCH请求:

标题:

Content-Type:application/x-www-form-urlencoded
api_token:ACITyBKf0jKrfqOFumTMcaEEJ8jU151crRdESMPmBj8zbeENslULHfNXlKeo
fb_id:xxxxxxxxxx

体:

distance:2
golds:19
xp:23

(注意:我使用 postman 测试了上述请求)

现在,问题是我发现了一个漏洞。

一个人可以随时找到他们的facebook用户访问令牌和他们的facebook id。因此,如果他们使用该用户访问令牌发出POST请求,他们将收到api_token(在"用户已存在!!"响应中)。一旦他们有api_token和fb_id,他们就可以发出PATCH请求,将他们的分数修改为他们想要的任何内容。

我做错了什么?如何保护我的服务器不被这样的黑客攻击?

请帮帮我。我是api设计的初学者。

由于

1 个答案:

答案 0 :(得分:0)

如果他们的API令牌在应用程序中完全可用,那可能是件坏事。如果应用程序无法使用它们,说它们只是伪造应用内POST请求并检索原始数据,那么它们可能正在尝试破解或测试系统。

如果是这种情况,可能首先通过POST发送未加密的API密钥是个坏主意。如果他们的API密钥是他们需要开始为您的系统做坏事,那么为什么要首先将它们交给他们呢?

因为您的应用需要它来记住它们。这样的事情怎么样:

新用户,服务器md5哈希其API密钥并将其发送给它们进行存储。 现有用户,服务器md5哈希其api密钥并将其发送给它们进行存储(如果需要) 发生官方现有分数更改:app re-md5散列已经散列的api密钥,并使用PATCH请求发送该密钥。服务器具有带有双重哈希api密钥的数据库,它可以找到你的密钥,并将你识别为用户,并且通常会从那里继续进行。