我们的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设计的初学者。
由于
答案 0 :(得分:0)
如果他们的API令牌在应用程序中完全可用,那可能是件坏事。如果应用程序无法使用它们,说它们只是伪造应用内POST请求并检索原始数据,那么它们可能正在尝试破解或测试系统。
如果是这种情况,可能首先通过POST发送未加密的API密钥是个坏主意。如果他们的API密钥是他们需要开始为您的系统做坏事,那么为什么要首先将它们交给他们呢?
因为您的应用需要它来记住它们。这样的事情怎么样:
新用户,服务器md5哈希其API密钥并将其发送给它们进行存储。 现有用户,服务器md5哈希其api密钥并将其发送给它们进行存储(如果需要) 发生官方现有分数更改:app re-md5散列已经散列的api密钥,并使用PATCH请求发送该密钥。服务器具有带有双重哈希api密钥的数据库,它可以找到你的密钥,并将你识别为用户,并且通常会从那里继续进行。