首页 > 解决方案 > 服务器验证与设备验证

问题描述

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

在 In-App-Billing 的 Android 开发人员指南中有一个“最佳实践”部分(请参阅https://developer.android.com/google/play/billing/billing_best_practices)。

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

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

这两种方法似乎都实现了签名检查——无论是在设备上还是在远程服务器上。

我猜想可用的破解工具能够扫描并禁用设备上的安全检查——所以这可能是“让它变得困难”的意思。

否则,我看不出逆向工程师寻找设备上检查与寻找服务器往返之间的区别。这两个调用都可以被删除或替换为“始终为真”的返回值。

最佳实践文档还指出:“验证 orderId 是您之前未处理过的唯一值”。即使这对(对?)我来说似乎也是有问题的。

假设逆向工程师无法找到并替换到服务器的验证往返,并且您跟踪远程服务器上的所有订单 ID - 它们仍然没有绑定到任何用户 ID。那么你如何决定,是否

(我想您可以通过启发式方法进行检查 - 比如说在 X 个月内允许 3 个相同的订单 ID,但总会有阻止合法买家的风险。)

这些问题对我来说似乎相当基本 - 因此我假设我根本没有了解整个情况。如果有人能对此有所了解,我将不胜感激。

标签: androidin-app-purchasein-app-billing

解决方案


推荐阅读