3

所以我正在创建一个 iOS 框架,它将是一个静态库,开发人员将添加到他们的项目中,当他们在我们的网站上创建一个帐户时,我想给他们一个独特的令牌,他们将其放入他们的应用程序中以使用我的静态图书馆。

对于 iOS 开发者,想想 TestFlight,你注册,获取一个 App ID,然后运行[TestFlight takeOff:<#some-key#>];

我想验证框架向我的 REST Web 服务发出的请求(使用 https)。

我能做些什么来防止人们“闯入应用程序代码”并窃取开发人员的 api 令牌并使用它来发出请求吗?我的 api 端点不会是公共信息,至少现在是这样。而且我无法对用户进行身份验证,因为它是一个框架,那将是一个糟糕的用户体验。

问题是,我能做些什么来防止这种行为吗?我还应该关心吗?我最终会按 X 请求向开发人员收费,所以我希望对此进行身份验证,这样我们就不会让垃圾邮件发送者为开发人员收取费用。

其他 iOS 框架如何处理这个问题?

欢迎任何设计理念和批评。

4

1 回答 1

1

我不确定您尝试做的事情是否可行。如果文本在客户端代码中,则可以将其拉出。SSL-pinning 在这里也不会真正帮助你,因为证书也在客户端二进制文件中。

您可能能够接近的一种方法是使用开发人员的身份验证系统。假设用户登录到开发人员的身份验证系统,然后在服务器端为该用户生成一个短期密钥。然后客户端代码可以传递(通过 SSL 固定)该短期密钥并使用它来进行 API 调用。但是,这需要开发人员实际上拥有一个安全的身份验证系统,并且如果没有 SSL-pinning,他们很容易受到简单的中间人攻击,这将泄露短暂的密钥。

您可以尝试通过限制 API 调用来尽量减少损害,或者尝试使用每个应用程序的启发式方法来估计正常 API 使用的样子。任何不正常的东西都会被标记为潜在的黑客攻击。这可能足以淘汰大多数想成为黑客的人。真正的黑客会了解节流并巧妙地规避它......

您最安全的选择是使其成为服务器端库而不是客户端库。然而,这当然也不是一个超级性感的解决方案。并非所有应用程序都有服务器端组件......即使他们这样做,一旦开发人员的服务器受到破坏(即被垃圾邮件或黑客攻击等),游戏就会再次结束。但是,归根结底,服务器端解决方案的好处是您至少不易受到攻击,并且您将保护系统安全的责任交给了开发人员。

这里真正缺乏的是某种形式的基于 Apple 的对来自 Apple 设备的网络呼叫的验证......但这可能永远不会发生。:)

于 2013-08-02T22:58:46.850 回答