服务器上的验证与设备上的验证

时间:2019-01-03 10:32:25

标签: android in-app-purchase in-app-billing

我目前正在尝试在Android上停止应用内购买。我想实施一种非消耗性的一次性产品,即在购买该产品后允许永久访问该应用程序中的所有内容。

Android开发者针对应用内结算的指南中有“最佳做法”部分(请参见https://developer.android.com/google/play/billing/billing_best_practices)。

其中指出:“强烈建议在您信任的服务器上验证购买详细信息。[...]通过在服务器上实施签名验证逻辑,攻击者很难对您的产品进行反向工程APK文件。”

我不明白此声明背后的逻辑-假设一个人在应用程序中没有用户帐户。

这两种方法似乎都可以在设备或远程服务器上实现签名检查。

我猜想可用的破解工具能够扫描并禁用设备上的安全检查-因此,这可能意味着“使其变得困难”。

否则,反向工程师是否在寻找设备上的检查与服务器往返是否存在差异。可以删除这两个调用,也可以将其替换为“始终为真”的返回值。

最佳做法文档还指出:“验证orderId是您之前未处理过的唯一值” 。 甚至这对我来说也令人怀疑。

假设反​​向工程师无法找到并替换到服务器的验证往返行程,并且您可以跟踪远程服务器上的所有订单ID-它们仍然不受任何用户ID约束。那么,如何确定

  • 用户已切换设备(或丢失了数据)并正在恢复购买或
  • 有人试图非法获取付费内容吗?

(我想您可以通过试探法进行检查-假设在X个月内允许3个相同的订单ID,但始终有阻止合法购买者的风险。)

这些问题对我来说似乎是很基本的-因此,我认为我只是不了解整个情况。如果有人能对此有所说明,我将非常感激。

0 个答案:

没有答案