我正在使用Google Play结算API(v3),而我正在使用sku=android.test.purchased
测试应用内购买。为此,我已经从辅助类中修改了方法Security.verifyPurchase
,如下所示:
public static boolean verifyPurchase(String base64PublicKey, String signedData, String signature, String sku) {
if (TextUtils.isEmpty(signedData) || TextUtils.isEmpty(base64PublicKey) || TextUtils.isEmpty(signature)) {
Log.e(TAG, "Purchase verification failed: missing data.");
if ("android.test.purchased".equals(sku) || BuildConfig.DEBUG) {
Log.e(TAG, "This was a test purchase");
return true;
}
return false;
}
PublicKey key = Security.generatePublicKey(base64PublicKey);
return Security.verify(key, signedData, signature);
}
我的代码与我发现的教程中的代码略有不同:我添加了这个:
"android.test.purchased".equals(sku)
最初,只添加了对BuildConfig.DEBUG
的验证,但我需要让测试用户快速购买产品,而无需添加付款数据。
我的问题是:如果我在我的制作应用程序中使用此代码(或者仅适用于alpha / beta),是否存在严重的安全问题?
答案 0 :(得分:2)
对于生产版本,这种修改绝对不行,因为它会禁用响应验证。如果攻击者未在您的代码中提供base64PublicKey
,signedData
,signature
和测试sku
,则您的应用将允许在生产中使用应用内功能实际上为他们买单。
如果在DEBUG版本中您想要允许所有sku's
,请删除您的支票。如果您只想使用sku
,请使用&&
运算符或以下代码。
if (BuildConfig.DEBUG) {
Log.e(TAG, "This was a test purchase");
return "android.test.purchased".equals(sku);
}