Play Integrity API 帮助您检查交互和服务器请求是否来自在真实 Android 设备上运行的真实应用程序二进制文件。通过检测潜在的风险和欺诈性交互(例如,来自篡改的应用程序版本和不可信的环境),您的应用程序的后端服务器可以做出适当的响应,以防止攻击并减少滥用。
当您的应用程序或游戏在装有 Google Play 商店并由 Google Play 服务提供支持的 Android 设备上使用时,Play Integrity API 会提供响应,帮助您确定您是否正在与以下内容进行交互
- 真实应用程序二进制文件:确定您是否正在与 Google Play 识别的未修改二进制文件进行交互。
- 真实的 Play 安装:确定当前用户帐户是否已获得许可,这意味着用户已在 Google Play 上安装或付费购买您的应用程序或游戏。
- 真实的 Android 设备:确定您的应用程序是否在由 Google Play 服务提供支持的真实 Android 设备(或 Google Play 游戏的真实 PC 实例)上运行。
您还可以选择在 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 管理中心中 API 响应中的 附加设备标签 来根据设备可信度对您的执行策略进行分层。每个设备将返回其满足所有标准的标签。例如,在选择接收所有设备标签后,您可以选择更信任返回 MEETS_STRONG_INTEGRITY
、MEETS_DEVICE_INTEGRITY
和 MEETS_BASIC_INTEGRITY
的设备,而不是只返回 MEETS_BASIC_INTEGRITY
的设备。您可以在每种情况下从服务器发送不同的响应。
从服务器向您的应用程序发送一系列响应
与为每个响应从服务器向应用程序发送二进制允许/拒绝响应相比,拥有多个决策结果更容易复制。例如,您可以使用一系列相关的响应,例如允许、限制允许、完成验证码后限制允许以及拒绝。
使用最近的设备活动检测大规模滥用
使用 Play 完整性 API 中的 最近的设备活动 功能查找请求大量完整性令牌的设备。高流量活动滥用者通常会从真实设备生成有效的证明结果,并将它们提供给机器人,以自动化对已植根设备和模拟器的攻击。您可以使用最近的设备活动级别来检查过去一小时内您的应用程序在该设备上生成了多少次证明。
显示可操作的错误消息
在可能的情况下,向用户提供有用的错误消息,并让他们知道他们可以采取哪些措施来解决问题;例如重新尝试、启用互联网连接或检查 Play 商店应用是否为最新版本。
制定应对意外问题或停机的计划
Play 状态信息中心 显示有关 Play 完整性 API 服务状态的信息,以及有关任何中断和停机的的信息。您应该提前计划如何在 Play 完整性 API 出现大规模停机(可能性很小)时让您的后端服务器正常运行。
考虑端到端企业反欺诈解决方案
寻找完整的欺诈和机器人管理解决方案的企业客户可以购买 reCAPTCHA Enterprise for mobile,其中包括 Android SDK,这些 SDK 可为开发人员提供欺诈风险评分。reCAPTCHA Enterprise 自动包含 Play 完整性 API 信号,并将这些信号与 reCAPTCHA 网络和应用程序信号相结合,为客户提供无缝的、不可见的反欺诈管理解决方案,开箱即用。它还可以为 Play 完整性 API 不可用之处提供 Android 应用程序保护。
在访问高价值或敏感功能时挑战有风险的流量
识别应用程序或游戏中要使用 Play 完整性 API 进行保护的高价值或敏感操作,而不是直接拒绝访问。在可能的情况下,在允许执行高价值操作之前,对有风险的流量进行挑战。例如,当应用程序访问风险表明应用程序正在运行可能会捕获屏幕的应用程序时,请要求用户在允许他们继续执行要保护的功能之前禁用或卸载能够捕获屏幕的应用程序。
服务条款和数据安全
通过访问或使用 Play 完整性 API,您同意 Play 完整性 API 服务条款。在访问 API 之前,请阅读并理解所有适用的条款和政策。
Google Play 为开发人员提供了一个数据安全部分,供开发人员披露其应用程序的数据收集、共享和安全实践,以使您的用户了解情况。要帮助您完成数据表格,请参阅有关 Play 完整性 API 如何处理数据 的信息。