我们目前的任务是实现一个(最好是简单的)身份验证系统,用于与RESTful API进行移动应用程序通信。后端具有用户特定的数据,由用户的电话号码标识。我试图更多地了解安全性,不同的方法以及它们工作方式的原因。
我想到了一个简单的身份验证系统:
我有以下问题:
这种方法有什么重大缺陷吗? 假设我们使用HTTPS,它是否足够安全以发送未加密的数据? 访问令牌是否可以安全地存储在移动设备上,以便只有我们的应用程序可以读取它们? 还有其他我们没想过的东西吗?
我们已经发现,当手机被盗或以其他方式受到损害时,数据不再安全,但这是一个难以克服的风险。访问令牌可以暂时有效,以最大限度地降低这种风险。
我假设这种方法很简单,某处有一个巨大的缺陷:)你能开导我吗?
答案 0 :(得分:5)
有一个缺陷。该系统易受蛮力攻击。
假设我是攻击者。我将为自己生成一个guid并将其与一些任意电话号码一起发送。
接下来,我将通过可能的短信代码强行执行 - 如果它是6位数,那么只有10 ^ 6种组合。暴力行为只需几秒钟 - 然后我将获得持有此手机的人的数据。
此外,正如Filou的评论所指出的,人们可以强迫您向您发送任意数量的短信,从而有效地让您免费承受经济损失。
这次袭击也没有有效的防御措施:
在SMS之前,登录/密码或证书身份验证强制。也:
答案 1 :(得分:0)
您提到的方法可行。客户端将使用电话号码和随机ID发起请求,服务器会向设备返回验证令牌。令牌仅在设定的到期时使用一次。然后,客户端将发送电话号码,之前使用的随机令牌以及服务器验证的验证令牌。如果有效,则服务器发送可用于身份验证的会话令牌(或身份验证令牌)或类似令牌。会话令牌可以从服务器设置超时 你没有提到它是否是一个网络应用程序。如果是Web应用程序,则可以从服务器设置仅https会话cookie。否则,您可以将其本地存储在应用程序的本地存储中。通常情况下,应用无法读取属于其他应用的私有数据 所有通信都必须使用HTTPS进行。否则,整个方案可能会通过嗅探流量而受到损害,因为最终您使用的是身份验证令牌。