0

我正在为它们构建一套移动应用程序和一个随附的 Web 服务。为了保护从应用程序到 Web 服务的连接(达到合理水平),我使用了 2-legged OAuth 方法,每个应用程序都使用唯一的消费者密钥/秘密。

我的问题是如何验证移动应用收到的响应实际上来自我的服务器。例如,如果我有一个端点来确认用户是否可以通过传入一组布尔值来访问某些功能,据我所知,没有什么可以阻止某人修改他们的主机文件并发回一个欺骗性的响应,表明他们可以访问一切。它是否正确?

我提出的解决方案是让应用程序存储服务器也知道的响应秘密。当服务器发送它的响应时,它会生成数据的哈希值和秘密。然后应用程序重新生成哈希并检查它是否匹配。这样,用户只有在知道应用程序中存储的秘密时才能劫持请求。

是否有解决此问题的最佳实践?

简单地在 HTTPS 下托管 Web 服务会解决问题,还是有人仍然能够复制 Web 服务并发回欺骗性响应?

非常感谢

4

2 回答 2

0

HTTPS 旨在解决这个确切的问题,并且做得很好(当然假设客户端不能被欺骗信任不应该信任的证书 - 这对于大多数现实生活中的移动应用程序来说不应该是一个问题情景)。我会坚持使用 HTTPS,而不是尝试发明自己的解决方案。具体来说,在您提出的解决方案中,攻击者只需要获得您的应用程序的一个副本 - 他们可以对其进行逆向工程,提取秘密,然后攻击所有其他副本。

于 2012-10-06T17:59:52.733 回答
0

您可以使用 HMAC 计算两端的值并比较结果,如果相同,则表示它来自您的服务器。一个缺点是攻击者如此坚定并且能够对您的应用程序进行逆向工程并提取 HMAC 中使用的密钥,然后这将结束。也有一些方法可以避免这种情况,但这一切都取决于您的应用程序或数据的价值。最好的解决方案是使用数字签名和公钥加密。我不会推荐 https,因为如果攻击者非常坚定,即使证书固定不是很有效,它也可以轻松绕过,但这一切都取决于你的应用程序的价值。

于 2017-12-19T06:41:37.123 回答