Play Integrity API 可帮助您检查互动和服务器请求是否来自在正版 Android 设备上运行的正版应用二进制文件。通过检测可能存在风险的欺诈性互动(例如来自被篡改的应用版本和不可信环境的互动),应用的后端服务器可以采取适当的措施来防范攻击并减少滥用行为。
当您的应用或游戏在已安装 Google Play 商店且由 Google Play 服务提供支持的 Android 设备上使用时,Play Integrity API 会提供响应,帮助您确定您是否正在与以下各项互动:
- 正版应用二进制文件:确定您是否正在与 Google Play 可识别的未经修改的二进制文件进行互动。
- 正规 Play 安装:确定当前用户账号是否已获得许可,即用户是否在 Google Play 上安装或购买了您的应用或游戏。
- 正版 Android 设备:确定您的应用是否在由 Google Play 服务提供支持的正版 Android 设备(或 Google Play 游戏电脑版的正版实例)上运行。
您还可以选择在 Play Integrity API 响应中接收有关环境的信息,包括:
- 应用访问风险:确定是否有正在运行的应用可能会截屏、显示叠加层或控制设备。
- 已知恶意软件风险:确定 Google Play 保护机制是否已开启,以及是否在设备上发现了有风险或危险的已安装应用。
概览
当用户在您的应用中执行操作时,您可以调用 Play Integrity API,以检查相应操作是否发生在通过 Google Play 安装且在正版 Android 设备上运行的正版应用二进制文件中。您还可以选择在响应中接收其他信息,包括设备最近发出的请求量以及环境相关信号,包括应用访问风险判定结果和 Play 保护机制判定结果。如果无法顺利判定,应用的后端服务器可决定如何防范滥用和欺诈、不当使用和欺骗、未经授权的访问、攻击等问题。
安全注意事项
如果您遵循以下推荐做法,Play Integrity API 可为您的应用带来最大价值:
制定反滥用策略
Play Integrity API 与其他信号一起使用(即作为整体反滥用策略的一部分,而不是作为唯一的反滥用机制)时效果最佳。在应用中使用该 API 时,请同时搭配使用其他适当的安全性最佳实践。默认情况下,应用每天最多可针对所有安装发出共 10,000 次请求,但您可以请求提高每日上限。
收集遥测数据并了解受众群体,再采取行动
在根据 Play Integrity API 判定结果更改应用行为之前,您可以先实现该 API,但不进行违规处置,以了解现有受众群体的当前状况。了解当前安装群体返回的判定结果后,就可以预估计划采取的任何违规处置的影响,并相应地调整反滥用策略。
确定如何请求完整性判定
Play Integrity API 提供两种用于请求和接收完整性判定的选项。无论您是发出标准请求、传统请求,还是两者并用,系统都会以相同的格式返回完整性判定响应。
标准 API 请求适用于任何应用或游戏,可以按需发出,用于检查用户操作或服务器请求是否真实。标准请求的延迟时间最短(平均几百毫秒),并且获得可用判定结果的可靠性很高。标准请求会利用设备端的智能缓存,同时将针对特定攻击类型的防护任务委托给 Google Play。
传统 API 请求是请求完整性判定的原始方式,目前仍可继续使用。传统请求的延迟时间较长(平均几秒钟),并且您必须自行负责缓解某些攻击类型的风险。由于传统请求会发起新的评估,与标准请求相比会使用更多的用户数据流量和电量,因此不应频繁发出传统请求,而应将其作为一种一次性手段,用于检查敏感性或重要性较高的操作是否真实。如果您考虑发出传统请求,并将其缓存以供日后使用,建议您改为发出标准请求,以降低遭到攻击的风险。
下表重点介绍了这两种请求之间的一些主要区别:
标准 API 请求 | 传统 API 请求 | |
---|---|---|
所需的最低 Android SDK 版本 | Android 5.0(API 级别 21)或更高版本 | Android 4.4(API 级别 19)或更高版本 |
需要 API 预热 | ✔️(几秒) | ❌ |
典型的请求延迟时间 | 几百毫秒 | 几秒 |
潜在请求频率 | 频繁(对任何操作或请求进行按需检查) | 不频繁(针对最有价值的操作或最敏感的请求进行一次性检查) |
缓解重放和类似攻击 | 由 Google Play 的自动缓解 | 结合使用 nonce 字段和服务器端逻辑 |
在传统请求注意事项部分中,您可以看到一个列出了二者更多区别的表格。
适时请求完整性判定
您应尽可能在要防止被访问的操作或服务器请求发生时,请求获取应用访问风险判定结果,以防诈骗者绕过应用执行的完整性检查。
使 API 请求难以复制
标准 API 请求具有一个名为 requestHash
的字段,用于防范篡改和类似攻击。在该字段中,您应添加应用请求中所有相关值的摘要。请遵循有关如何使用内容绑定的指南来保护应用的标准请求。
传统 API 请求具有一个名为 nonce
(“number once”的缩写)的字段,用于防范某些类型的攻击,例如重放攻击和篡改攻击。请遵循有关如何生成 Nonce 的指南来保护应用的传统请求。
避免缓存完整性判定
缓存完整性判定会增加发生代理攻击的风险。在代理攻击中,作恶方会重复使用来自正常设备的判定结果,以便在其他环境中滥用。您可以发出标准 API 请求以按需获取判定结果,而不是将响应缓存起来。
采用分层强制执行策略
Play Integrity API 的完整性判定包含一系列可能的响应,使您可以制定具有多个强制执行层级的反滥用策略。为此,您可以将应用的后端服务器配置为根据每个可能的响应或响应组而表现出不同的行为。
此外,您还可以通过 Play 管理中心选择在 API 响应中接收其他设备标签,以便根据设备可信度对您的强制执行策略进行分层。每台设备都将返回其满足条件的所有标签。例如,在选择接收所有设备标签后,与仅返回 MEETS_BASIC_INTEGRITY
的设备相比,您可以选择更信任返回 MEETS_STRONG_INTEGRITY
、MEETS_DEVICE_INTEGRITY
和 MEETS_BASIC_INTEGRITY
的设备。在每种情况下,您都可以通过服务器进行不同的响应。
从服务器向应用发送一系列响应
与其每次都将二进制“允许”/“拒绝”响应从服务器发送回应用,不妨提供一系列决策结果,因为这样可以增加复制难度。例如,您可以使用一系列相关的响应,如“允许”“允许但有限制”“CAPTCHA 完成后允许但有限制”和“拒绝”。
使用近期设备活动记录检测大规模滥用行为
使用 Play Integrity API 中的近期设备活动功能查找请求大量完整性令牌的设备。大量活动滥用者通常会从真实设备生成有效的证明结果,并将证明结果提供给机器人,以自动对其已取得 root 权限的设备和模拟器进行攻击。您可以使用近期设备活动记录级别来检查过去一小时内您的应用在相应设备上生成的证明数量。
显示可执行操作的错误消息
尽可能向用户提供有用的错误消息,并告诉用户可以采取什么措施来解决问题,例如重试、启用互联网连接或检查 Play 商店应用是否为最新版本。
针对意外问题或服务中断制定计划
Play 状态信息中心会显示有关 Play Integrity API 服务状态的信息,以及任何服务暂停和中断的相关信息。您应提前规划后端服务器的运作机制,以应对极少数情况下 Play Integrity API 发生大规模服务中断的情况。请注意,在设备专用的 Android 平台密钥认证密钥被撤消的情况下,您的后端服务器也应能够正常运行。
考虑端到端企业欺诈解决方案
寻求完整的欺诈和机器人管理解决方案的企业客户可以购买移动版 reCAPTCHA Enterprise,其中包含的适用于 Android 的 SDK 会向开发者提供欺诈风险评分。reCAPTCHA Enterprise 自动包含 Play Integrity API 信号,并将这些信号与面向客户的 reCAPTCHA 网络和应用信号相结合,提供开箱即用、隐蔽又顺畅的欺诈管理解决方案。此外,它还可向不支持 Play Integrity API 的 Android 应用提供保护。
对访问高价值或敏感功能的风险流量进行查验
确定应用或游戏中的高价值或敏感操作,以通过 Play Integrity API 进行保护,而不是直接拒绝访问。在可能的情况下,请先对存在风险的流量进行查验,然后再允许执行高价值操作。例如,当应用访问风险信号表明一款可截屏的应用正在运行时,请要求用户停用或卸载可截屏的应用,然后才允许用户继续使用您要保护的功能。
服务条款和数据安全
访问或使用 Play Integrity API 即表示您同意接受 Play Integrity API 服务条款。请先阅读并了解所有适用的条款及政策,然后再访问该 API。
Google Play 有一个“数据安全”部分,供开发者披露其应用的数据收集、分享和安全做法,以便用户及时了解相关信息。为了帮助您填写数据表单,请参阅有关 Play Integrity API 如何处理数据的信息。