随着您的应用越来越受欢迎,也可能会引起恶意用户的注意,他们可能会滥用您的应用。本主题介绍了您应使用的建议措施,以帮助防范针对您的结算集成的攻击,并减少应用中的滥用行为造成的影响。
将敏感逻辑移至您的后端
在应用设计允许的范围内,将敏感数据和逻辑移至您控制的后端服务器。前端设备中的数据和逻辑越多,就越容易被修改或篡改。
例如,在线象棋游戏应在后端验证所有棋步,而不是信任前端始终发送合法的棋步。
此外,如果您发现漏洞或安全问题,根据您的系统设计,在后端进行调试、修复和发布更新可能会比在前端更容易。
授予权限前验证购买交易
应该在后端处理的敏感数据和逻辑的一个特殊情况是购买验证和确认。用户购买后,您应执行以下操作:
- 将相应的
purchaseToken
发送到您的后端。这意味着您应该维护所有购买交易的purchaseToken
值的记录。 - 验证当前购买交易的
purchaseToken
值与任何以前的purchaseToken
值都不匹配。purchaseToken
是全局唯一的,因此您可以安全地将此值用作数据库中的主键。 - 使用 Google Play Developer API 中的
Purchases.products:get
或Purchases.subscriptionsv2:get
端点向 Google 验证购买交易是否合法。 - 如果购买交易合法且未曾使用过,您就可以安全地授予对内购商品或订阅的权限。
- 对于订阅,当
Purchases.subscriptionsv2:get
中设置了linkedPurchaseToken
时,您还应该从数据库中移除linkedPurchaseToken
,并撤销授予linkedPurchaseToken
的权限,以确保多个用户不会获得同一购买交易的权限。 - 您应仅在购买状态为
PURCHASED
时才授予权限,并确保正确处理PENDING
购买交易。如果取消的购买交易激增,您可能是在购买交易仍处于PENDING
状态时授予了权限。您可以在处理待处理交易中找到更多信息。 授予权限后,如果您想消耗并确认某个可消耗商品,请在您安全的后端服务器上使用
Purchases.products:consume
Play Developer API。要确认某个不可消耗商品或订阅,请在您安全的后端服务器上调用相关的 Play Developer API 端点,即Purchases.products:acknowledge
或Purchases.subscriptions:acknowledge
。确认是必需的,因为这会告知 Google Play 用户已获得购买交易的权限。您应该在授予权限后立即确认购买交易。请注意,虽然您可以通过应用在客户端确认或消耗购买交易,但服务器端 API 可提供额外的保护,以防出现网络连接不佳和恶意活动等问题。例如,如果用户从您的应用中购买了某个商品,但在验证购买交易时他们丢失了网络连接。如果没有服务器确认,他们可能需要重新通过应用登录以完成确认流程。否则,如果用户在三天内未重新登录,该购买交易将因缺乏购买确认而自动退款。服务器确认可在 Google Play 通知服务器购买交易有效时立即发送确认,从而避免这种情况。
如需详细了解购买确认和消耗,请参阅处理购买交易。
保护您已解锁的内容
为了防止恶意用户重新分发您已解锁的内容,请勿将其捆绑到您的 APK 文件中。相反,请执行以下操作之一:
- 使用实时服务(例如内容 Feed)来分发您的内容。通过实时服务分发内容还可以让您保持内容的新鲜度。
- 使用远程服务器来分发您的内容。
当您从远程服务器或实时服务分发内容时,可以将已解锁的内容存储在设备内存中,或存储在设备的 SD 卡上。如果您将内容存储在 SD 卡上,请务必加密内容并使用设备专用的加密密钥。
检测和处理作废的购买交易
作废的购买交易是指已取消、撤销或退款的购买交易。如果作废的购买交易此前曾授予用户内购商品或其他内容,您可以使用 Voided Purchases API 来获取购买交易作废的原因以及可以追回的任何相关内容。
内购商品和订阅的购买交易可能因各种原因作废,包括以下原因:
- 购买交易被取消,无论是用户取消、开发者取消还是 Google 取消(包括未确认的自动取消购买交易)。对于订阅,请注意,这指的是取消订阅的购买交易,而不是取消订阅本身。
- 购买交易已被退款。
- 应用开发者取消或退款了某个用户订单,并在控制台中勾选了“撤销”选项。
根据作废购买交易的原因,并考虑到之前的用户行为数据,您可以决定采取何种措施。我们建议实施以下一项或多项措施:
- 执行追回:当购买交易作废时,您可以追回未使用的商品,就像从未购买过一样。例如,如果某个游戏内货币购买交易作废,您可以追回已经授予用户的货币。如果用户已经花费了该货币,请考虑将货币余额设为负数,并限制应用活动和未来的购买交易,直到货币余额为正。
- 多次违规处理:对于初犯者,可以考虑采取不太严厉的措施,例如显示应用内警告。对于屡犯者,可以考虑更严厉的措施。
- 暂时停用购买:与多次违规处理类似,可以考虑对有作废购买交易的用户暂时停用购买功能,直到您可以更彻底地调查购买交易作废的原因。
- 暂时或永久禁止访问您的应用:对于极端情况下屡次出现恶意活动的用户,可以考虑暂时或永久禁止其访问您的应用。
- 频繁调用 Voided Purchases API:当您检测到一个或多个作废购买交易时,可以考虑更频繁地调用 Voided Purchases API,以便在用户消耗这些购买交易之前将其追回。您可以在 Voided Purchases API 文档中找到关于 Voided Purchases API 配额的更多信息。
帮助 Google 在欺诈发生前进行检测
某些类型的欺诈与恶意用户创建多个 Google 帐号和应用内帐号以隐藏其活动有关。
在 BillingFlowParams
的构建器中使用 setObfuscatedAccountId
和 setObfuscatedProfileId
方法,以帮助 Google 将 Google 帐号映射到应用内帐号。
Google 使用这些数据来检测可疑行为,并在某些类型的欺诈性交易完成之前予以阻止。
针对商标和版权侵权行为采取行动
如果您使用远程服务器分发或管理内容,请在用户访问内容时,让您的应用验证已解锁内容的购买状态。这样,您就可以在必要时撤销使用权,并将盗版活动降至最低。如果您发现您的内容在 Google Play 上被重新分发,请务必迅速果断地采取行动。如需详细了解,请参阅版权帮助中心中的常见版权问题解答页面。