Play Integrity API 可帮助您检查交互和服务器请求是否来自在正版 Android 设备上运行的您的正版应用二进制文件。通过检测潜在的风险和欺诈性交互(例如来自篡改后的应用版本和不可信的环境),您的应用后端服务器可以做出相应的响应,以防止攻击并减少滥用。
当您的应用或游戏在安装了 Google Play 商店并由 Google Play 服务支持的 Android 设备上使用时,Play Integrity API 会提供响应,帮助您确定您是否正在与以下内容进行交互
- 正版应用二进制文件:确定您是否正在与 Google Play 识别的未修改的二进制文件进行交互。
- 正版 Play 安装:确定当前用户帐户是否有许可证,这意味着用户已在 Google Play 上安装或付费购买您的应用或游戏。
- 正版 Android 设备:确定您的应用是否在由 Google Play 服务(或适用于 PC 的正版 Google Play 游戏实例)支持的正版 Android 设备上运行。
您还可以选择在 Play Integrity API 响应中接收有关环境的信息,包括
- 应用访问风险:确定是否有应用正在运行,这些应用可能用于捕获屏幕、显示叠加层或控制设备。
- 来自已知恶意软件的风险:确定 Google Play Protect 是否已开启以及它是否已发现设备上安装了有风险或危险的应用。
概述
当用户在您的应用中执行操作时,您可以调用 Play Integrity API 以检查该操作是否发生在由 Google Play 安装并在正版 Android 设备上运行的您的正版应用二进制文件中。您还可以选择加入响应中的其他信息,包括设备最近发出的请求量以及有关环境的信号,包括应用访问风险裁决和 Play Protect 裁决。如果裁决有任何问题,则您的应用后端服务器可以决定采取哪些措施来防御滥用和欺诈、误用和作弊、未经授权的访问和攻击等问题。
安全注意事项
当您遵循以下建议做法时,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
(一次性数字的缩写)的字段,用于防止某些类型的攻击,例如重放和篡改攻击。请遵循 如何生成 nonce 中的指南来保护应用的经典请求。
避免缓存完整性验证结果
缓存完整性验证结果会增加代理的风险,代理是一种攻击,攻击者在其他环境中将来自良好设备的验证结果重复用于恶意目的。您可以 发出标准 API 请求 以按需获取验证结果,而不是缓存响应。
制定分层执行策略
Play 完整性 API 的完整性验证结果有多种可能的响应,这使得可以构建具有多个执行级别的反滥用策略。您可以通过配置应用的后端服务器,使其根据每个可能的响应或响应组以不同的方式运行来实现这一点。
您还可以通过选择加入接收 Play Console 中 API 响应中的 其他设备标签 来根据设备可信度分层执行策略。每个设备都会返回其满足条件的所有标签。例如,在选择加入接收所有设备标签后,您可以选择信任返回 MEETS_STRONG_INTEGRITY
、MEETS_DEVICE_INTEGRITY
和 MEETS_BASIC_INTEGRITY
的设备,而不是仅返回 MEETS_BASIC_INTEGRITY
的设备。您可以在每种情况下从服务器发出不同的响应。
从您的服务器向您的应用发送一系列响应
与服务器向应用发送二进制的允许/拒绝响应相比,发送一系列决策结果更难复制。例如,您可以使用一系列相关的响应,例如允许、允许但有限制、在完成验证码后允许但有限制以及拒绝。
使用最近的设备活动检测大规模滥用
使用 Play 完整性 API 中的 最近的设备活动 功能查找请求大量完整性令牌的设备。高活动量滥用者通常会从真实设备生成有效的证明结果,并将其提供给机器人以自动攻击已植根的设备和模拟器。您可以使用最近的设备活动级别来检查您的应用在过去一小时内在该设备上生成了多少个证明结果。
显示可操作的错误消息
如果可能,请向用户提供有用的错误消息,并让他们知道可以采取哪些措施来解决问题;例如重试、启用互联网连接或检查 Play 商店应用是否已更新。
制定应对意外问题或中断的计划
Play 状态信息中心 显示有关 Play 完整性 API 服务状态的信息,以及有关任何中断和故障的信息。您应提前计划在极不可能发生的 Play 完整性 API 大规模中断的情况下,希望您的后端服务器如何运行。
考虑端到端企业欺诈解决方案
寻求完整欺诈和机器人管理解决方案的企业客户可以购买适用于移动设备的 reCAPTCHA Enterprise,其中包括 适用于 Android 的 SDK,为开发者提供欺诈风险评分。reCAPTCHA Enterprise 自动包含 Play 完整性 API 信号,并将其与 reCAPTCHA 网络和应用信号结合起来,为客户提供开箱即用的无摩擦、不可见的欺诈管理解决方案。它还可以为 Play 完整性 API 不可用时的 Android 应用提供保护。
在访问高价值或敏感功能时挑战有风险的流量
在您的应用或游戏中识别需要使用 Play 完整性 API 保护的高价值或敏感操作,而不是直接拒绝访问。如果可能,在允许高价值操作继续进行之前,请挑战有风险的流量。例如,当应用访问风险指示应用正在运行可能捕获屏幕的应用时,请要求用户在允许他们继续执行要保护的功能之前禁用或卸载可以捕获屏幕的应用。
服务条款和数据安全
通过访问或使用 Play 完整性 API,即表示您同意 Play 完整性 API 服务条款。在访问 API 之前,请阅读并了解所有适用的条款和政策。
Google Play 为开发者提供了一个数据安全部分,用于披露其应用的数据收集、共享和安全实践,以使您的用户了解情况。为了帮助您填写数据表单,请参阅有关 Play 完整性 API 如何处理数据 的信息。