防止iOS应用程序的“假客户端”问题

4

我们有一个 Android 和 iOS 应用程序,它通过 HTTP Web 服务向服务器发送数据和命令。我该如何防止假客户端发送内容到服务器?我该如何在服务器端确定数据/命令是否真的来自我们的应用程序。


你可能想要移除掉那个 Android 标签,因为它会产生误导。 - Jean-Philippe Roy
我们也有一个安卓应用,但我忘记写下来了。 - rakete
你还有什么不清楚的地方吗?或者问题已经得到回答了吗? - SMP
4个回答

9
您无法完全防止此类行为。有几种技术可以使人们滥用您的服务变得更加困难。
一个简单的方法是检查调用您的 web 服务的用户代理。另一个相当常见的方法是在您的 Web 服务器上使用简单的用户名/密码身份验证。用户名和密码将嵌入到您的应用程序中。
如果您有足够的时间,您应该考虑使用这两种方法的组合,再加上嵌入式 SSL 证书进行身份验证。您只需将其添加到您的项目中,如果有人真的想滥用您的服务,他至少需要从您的应用程序中提取此证书。
还有一些其他有用的技术,但您无法防止反向工程或网络嗅探。
此致, fuxx

此外,您可以定期在服务器上生成随机身份验证令牌,并通过推送将其发送到客户端 - 每个小时一次。然后客户端必须使用此令牌调用Web服务。 - HeikoG

3
最强大的解决方案是不去尝试。像DasFuxx的回答所建议的技术可以使它稍微更困难一些,但是有人总会反编译您的应用程序并获取嵌入其中的任何机密信息。
相反,请遵循多人游戏开发的规则:
不要相信客户端。 将您的应用程序视为用户界面的代理。考虑您的网络协议/API作为用户界面;然后设计该接口以使其无法被滥用。
可能不完全可能做到这一点,但在您成功的那一刻,您就拥有了真正的安全(而不是与DRM系统进行同样的苦战)。

2
我会实现oAuth。请参考以下链接,了解如何实现此解决方案的更多信息。

我不认为使用oAuth可以解决这个问题,因为你不能假设移动应用程序能够保守其客户端秘密(凭证)- 你可以获取应用程序的客户端凭证并伪造它。 - KFL

1

你做不到。就是这么简单...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接