应用程序结算插件中的安全问题

时间:2015-07-28 17:50:35

标签: android angularjs security ionic-framework in-app-billing

问题

用户在我的应用中进行了购买,但Google在其记录中没有任何痕迹。我想知道我的应用程序的安全性是否受到损害,或者我是否怀疑它是否存在于Google端。

上下文

我使用离子框架(角度)开发了一个混合应用程序。该应用程序支持应用程序结算,借助Android的cordova插件开源:https://github.com/poiuytrez/AndroidInAppBilling

该应用已部署在Play商店中,已经缩小和使用。

购买流程调用处理交易的插件,当交易完成(用户完成付款)时,插件会从Google收到有效负载。

inappbilling.buy(success, fail, productId)

示例有效负载

{  
   "orderId":"12999763169054705758.1385463868367493",
   "packageName":"com.example.myPackage",
   "productId":"example_subscription",
   "purchaseTime":1397590291362,
   "purchaseState":0,
   "purchaseToken":"ndglbpnjmbfccnaocnppjjfa.AO-J1Ozv857LtAk32HbtVNaK5BVnDm9sMyHFJkl-R_hJ7dCSVTazsnPGgnwNOajDm-Q3DvKEXLRWQXvucyW2rrEvAGr3wiG3KnMayn5yprqYCkMNhFl4KgZWt-4-b4Gr29_Lq8kcfKCkI57t5rUmFzTdj5fAdvX5KQ",
   "receipt":"{...}",
   "signature":"qs54SGHgjGSJHSKJHIU"
}

然后我将该有效负载发送到REST API。 API使用随每个请求发送的签名JWT令牌进行保护。在服务器端,JWT令牌被解码以获得用户ID。然后我将有效负载存储在用户实体中。

然后我用node-iap手动检查有效负载。我得到以下响应,这意味着有效载荷是合法的。

实际验证

{  
   receipt:{  
      kind:'androidpublisher#productPurchase',
      purchaseTimeMillis:'1436002850700',
      purchaseState:1,
      consumptionState:1,
      developerPayload:''
   },
   transactionId:'ofnjgihgpabbodngadeegagl.AO-J1OwBenqmX7tCt_XeW3bgDYMnxxxKqNi8x8Q_yuKsbDW5VFWm6WyDfbYAaCiyF2-BJFI4Sy6o2UGHwvPdY7X6qz0O_k64BBRYTot5W7z5bfpXQ391QbAhD0',
   productId:'paid.pro',
   platform:'google'
}

假设

免责声明:我的安全知识水平非常低。

假设用户在购买过程成功时找到了要调用的API端点。他有签名的JWT令牌,因为它在登录后存储在本地存储中。他必须生成一个有效载荷并使用JWT令牌发送它。

我检查时生成的有效负载似乎有效。这怎么可能?他是否设法获取我的私钥?

1 个答案:

答案 0 :(得分:0)

没有人拿到你的私钥。您的有效负载未使用公钥/私钥进行签名,只有您的令牌使用私钥进行签名。 因此,无论您使用有效令牌发送到服务器,都将被接受。