在 App Billing orderIDs 中并安全地验证订单
In App Billing orderIDs and safely validate order
我几个月前发布了一个免费的 Android 应用程序,您可以在其中购买 耐用产品 。在编码结算部分时,我没有注意订单验证,实际上我在购买完成时使用了代码:
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
if (mHelper == null) return;
if (result.isFailure() && result.getResponse() == 7) {
// Already bought
} else if (result.isFailure()) {
return;
}
if(purchase != null)
{
// add premium features
}
}
};
我知道这不是安全检查。
第一个问题。现在我可以通过 Analytics 看到我获得了两种 orderID 类型的交易:
GPA.XXXX-XXXX-XXXX-XXXXX
[19位].[16位]
据我所知,第二个大约在 2 年前就已弃用 (link),那么为什么我仍然收到该 orderID?此外,第一种类型的所有订单都在 Google Merchant Console 中可见,而第二种则不可见。
如果相关的 orderID 是第二个,那么在应用程序启动时添加一个检索购买和停用高级功能的检查是否安全?
第二个问题。 假设这可能是黑客攻击,还假设我认为不值得执行服务器端检查,如果我实施 verifyDeveloperPayload
什么时候采购?
据我所知,大多数流通的黑客(如 Freeedom)不会欺骗 developerPayload,它是在运行时根据 Google 帐户 ID 计算的,所以它应该足够了。
我正在回答我自己的问题,因为没有其他人这样做,而且我已经收集了更多相关信息。
第一个问题:如果您收到旧格式的 orderID,请丢弃它们,因为它们很可能来自 Lucky Patcher 和其他试图欺骗订单的类似工具。
第二个问题:上面引用的大多数工具,也欺骗开发人员有效负载并在响应中重播JSON,所以不要相信它。
最后,实施服务器端验证肯定会保护您的应用程序免受 IAB 黑客攻击。当然,他们仍然可以反编译它并删除服务器检查,但你们都已经知道这个故事了。
我几个月前发布了一个免费的 Android 应用程序,您可以在其中购买 耐用产品 。在编码结算部分时,我没有注意订单验证,实际上我在购买完成时使用了代码:
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
if (mHelper == null) return;
if (result.isFailure() && result.getResponse() == 7) {
// Already bought
} else if (result.isFailure()) {
return;
}
if(purchase != null)
{
// add premium features
}
}
};
我知道这不是安全检查。
第一个问题。现在我可以通过 Analytics 看到我获得了两种 orderID 类型的交易:
GPA.XXXX-XXXX-XXXX-XXXXX
[19位].[16位]
据我所知,第二个大约在 2 年前就已弃用 (link),那么为什么我仍然收到该 orderID?此外,第一种类型的所有订单都在 Google Merchant Console 中可见,而第二种则不可见。 如果相关的 orderID 是第二个,那么在应用程序启动时添加一个检索购买和停用高级功能的检查是否安全?
第二个问题。 假设这可能是黑客攻击,还假设我认为不值得执行服务器端检查,如果我实施 verifyDeveloperPayload
什么时候采购?
据我所知,大多数流通的黑客(如 Freeedom)不会欺骗 developerPayload,它是在运行时根据 Google 帐户 ID 计算的,所以它应该足够了。
我正在回答我自己的问题,因为没有其他人这样做,而且我已经收集了更多相关信息。
第一个问题:如果您收到旧格式的 orderID,请丢弃它们,因为它们很可能来自 Lucky Patcher 和其他试图欺骗订单的类似工具。
第二个问题:上面引用的大多数工具,也欺骗开发人员有效负载并在响应中重播JSON,所以不要相信它。
最后,实施服务器端验证肯定会保护您的应用程序免受 IAB 黑客攻击。当然,他们仍然可以反编译它并删除服务器检查,但你们都已经知道这个故事了。