Play Integrity API 概览

Play Integrity API 可帮助您检查用户操作和服务器请求是否来自通过 Google Play 安装且在正版 Android 设备上运行的正版应用。通过检测风险互动(例如来自被篡改的应用版本、不可信的设备或模拟环境的互动),后端服务器可以采取适当的措施来防范滥用和未经授权的访问、打击欺诈、打击作弊行为,并保护用户免遭攻击。

Play Integrity API 概览流程

该 API 会返回有助于您检测潜在威胁的判定结果,包括:

  • 未经授权的访问accountDetails 判定有助于您确定用户是否在 Google Play 上安装或购买了您的应用或游戏。
  • 代码篡改appIntegrity 判定结果有助于您确定自己是否正在与 Google Play 可识别到的未经修改的二进制文件进行互动。
  • 存在风险的设备和模拟环境deviceIntegrity 判定结果可帮助您确定应用是在经过 Play 保护机制认证的正版 Android 设备上运行,还是在 Google Play Games 电脑版的正版实例上运行。

Google Play 开发者还可以选择接收其他判定结果,以检测更广泛的潜在威胁,包括:

  • 其他应用的风险访问appAccessRiskVerdict 可帮助您确定是否有正在运行的应用可能会截屏、显示叠加层或控制设备(例如,通过滥用无障碍服务权限)。
  • 已知恶意软件playProtectVerdict 可帮助您确定 Google Play 保护机制是否已开启,以及是否发现设备上安装了存在风险或危险的应用。
  • 过度活跃recentDeviceActivity 级有助于您确定设备近期是否发出了数量异常高的请求,这可能表明存在自动流量,也可能是遭受攻击的迹象。
  • 重复滥用和重复使用的设备deviceRecall(Beta 版)可帮助您确定您是否正在与之前标记过的设备互动,即使您的应用已重新安装或设备已重置也是如此。

该 API 可用于各种 Android 设备规格,包括手机、平板电脑、可折叠设备、Android Auto、Android TV、Android XR、ChromeOS、Wear OS,以及 Google Play Games 电脑版。

安全注意事项

如果您遵循以下推荐做法,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_INTEGRITYMEETS_DEVICE_INTEGRITYMEETS_BASIC_INTEGRITY 的设备。在每种情况下,您都可以通过服务器进行不同的响应。

从服务器向应用发送一系列响应

与其每次都将二进制“允许”/“拒绝”响应从服务器发送回应用,不妨提供一系列决策结果,因为这样可以增加复制难度。例如,您可以使用一系列相关的响应,如“允许”“允许但有限制”“CAPTCHA 完成后允许但有限制”和“拒绝”。

使用设备回想功能检测重复滥用行为,同时保护用户隐私

设备回想让应用能够以保障用户隐私的方式存储和找回与特定设备关联的一些自定义数据。这些数据会存储在 Google 的服务器上,因此即使在重新安装应用或重置设备后,您的应用也能可靠地找回每台设备的数据。这样,您就可以可靠地重新识别过去曾被用于滥用行为的设备,以便采取措施阻止该设备再次被用于滥用行为。您可以为组成设备回想数据的三个值定义自己的含义:

  • 您最多可以将它们用作三个单独的标志或布尔值。例如,这些值可以表示设备是否已创建账号、是否已兑换免费试用、是否已知存在严重滥用行为。
  • 或者,您可以将值的所有状态合并到最多 8 个自定义标签中,例如,当所有三个值均未修改时,一个标签用于表示默认状态,而 7 个标签用于表示自定义含义。这样一来,您就可以根据自己定义的行为或操作,将所有设备细分为最多八个组。在此场景中,三个 writeDates 中最近更新的那个会指明您上次更新标签的时间。

处理设备召回数据时,还应注意前提条件和其他注意事项

使用近期设备活动记录检测大规模滥用行为

使用 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 如何处理数据的信息。