代码之家  ›  专栏  ›  技术社区  ›  Rob N

如何在验证应用内购买后安全地启用功能

  •  0
  • Rob N  · 技术社区  · 6 年前

    我正在开发一款iOS应用程序,但如果这里有答案,它可能也适用于其他平台。

    基本上有两种方法来验证应用内购买:本地和服务器端。服务器端方法是 documented here (我目前找不到本地方法的文档。)

    假设我在服务器端验证购买。我的问题是在那之后会发生什么,以启用购买的功能。我没有看到这方面的文档。我错过了吗?

    我想象两到三个步骤:

    1. 服务器向iOS应用程序发送HTTPS响应,说“是的,您购买了X”。
    2. 应用程序翻转内存中的一些布尔变量,以启用购买的功能。
    3. [可能]应用程序会将该状态保存到本地存储,这样就不需要在每次启动时通过互联网重新验证收据。

    所有这些步骤似乎都容易受到黑客/越狱客户端设备的攻击。显然,黑客攻击的难度、应用内购买的成本和潜在的收入损失之间存在权衡。我在考虑这样一种情况,即应用程序更昂贵或更受欢迎,可能有诱因攻击它。

    可能的漏洞示例:(同样,所有这些可能都需要一个对黑客有用的操作系统内核)

    • 真正的服务器响应可以被嗅探和检查,然后为其他用户伪造
    • 可以检查应用程序的内存,并翻转布尔变量
    • 如果状态已保存(例如,保存在文件或用户默认键值存储中),则该状态可能会被更改

    那么,是否有一些技术可以缓解或防止这些黑客行为?公司能接受做这件事的部分成本吗?

    0 回复  |  直到 6 年前
        1
  •  0
  •   enc_life    6 年前

    我不知道这里是否有一个“正确”的答案,因为你很好地概括了它:

    显然,黑客攻击的难度、应用内购买的成本和潜在的收入损失之间存在权衡。

    如果有官方的处理方式,那么它确实会成为黑客攻击的目标。

    我见过的大多数应用(即使是大型应用)都在本地存储中保存数据,以确定购买状态。但是您可以将这些数据保存在短缓存中,并每隔5分钟左右在后台刷新一次。这样黑客就需要每5分钟覆盖一次,这使得正常使用变得非常不切实际。

    除非支持用户的成本很高(例如Spotify支付许可费用),否则可能还有比这更好的投资领域。