检测和防范短信欺诈

本文档介绍了如何使用 reCAPTCHA 短信收费欺诈防护功能 检测并防止依赖短信服务企业的短信大量攻击 即双重身份验证 (2FA) 或手机验证, 短信收费欺诈的目标。

基于短信的身份验证(2FA 和登录)是登录和 注册安全,但无法防范短信诈骗或 短信激增欺诈。在您发送短信之前,reCAPTCHA 短信收费欺诈防护功能会为您提供 同时给出一个风险评分,指示该手机号码出现 短信诈骗。根据此得分,您可以允许或屏蔽欺诈性短信 ,然后再将其发送给短信服务提供商。

如需了解详情,请参阅 reCAPTCHA 短信话费欺诈防护博文

准备工作

根据您是 reCAPTCHA 的现有用户还是 reCAPTCHA 新手,请按照相应标签页中的说明操作:

现有 reCAPTCHA 用户

如果您是 reCAPTCHA 的现有用户,请启用 为您的 Google Cloud 项目提供 reCAPTCHA 短信收费欺诈防护:

  1. 在 Google Cloud 控制台中,前往 reCAPTCHA 页面。

    前往 reCAPTCHA

  2. 验证项目名称是否显示在资源选择器中。

    如果您没有看到项目名称,请点击资源选择器 然后选择您的项目。

  3. 点击 设置

  4. 如果您的项目未启用 reCAPTCHA 账号卫士,请执行以下操作:

    1. 账号卫士窗格中,点击启用
    2. Configure account Defender 对话框中,点击 Enable
  5. 短信话费欺诈防护窗格中,点击配置

  6. 点击启用切换开关,然后点击保存

    启用 reCAPTCHA 短信话费欺诈防护的操作可能需要几分钟才能传播到我们的系统。启用该功能的操作传播到我们的系统后,您将在评估过程中开始接收与 reCAPTCHA 短信话费欺诈防护相关的响应。

reCAPTCHA 新用户

如果您刚开始接触 reCAPTCHA,请执行以下操作:

  1. 根据您要在网站还是移动应用中使用 reCAPTCHA 短信话费欺诈防护,请按照以下步骤集成 reCAPTCHA:

  2. 启用 为您的 Google Cloud 项目提供 reCAPTCHA 短信收费欺诈防护:
    1. 在 Google Cloud 控制台中,前往 reCAPTCHA 页面。

      前往 reCAPTCHA

    2. 验证项目名称是否显示在资源选择器中。

      如果您没有看到项目名称,请点击资源选择器 然后选择您的项目。

    3. 点击 设置

    4. 如果您的项目未启用 reCAPTCHA 账号卫士,请执行以下操作:

      1. 账号卫士窗格中,点击启用
      2. Configure account Defender 对话框中,点击 Enable
    5. 短信话费欺诈防护窗格中,点击配置

    6. 点击启用切换开关,然后点击保存

      启用 reCAPTCHA 短信话费欺诈防护的操作可能需要几分钟才能传播到我们的系统。启用该功能的操作传播到我们的系统后,您将在评估过程中开始接收与 reCAPTCHA 短信话费欺诈防护相关的响应。

使用手机号码创建评估

如需针对 reCAPTCHA 短信收费欺诈防范,请使用 由 execute() 函数和手机号码生成,方法是使用 从后端使用 reCAPTCHA 客户端库或 REST API。

本文档介绍了如何使用 REST API 创建评估。如需了解如何使用客户端库创建评估,请参阅创建评估

在创建评估之前,请执行以下操作:

  • 设置 reCAPTCHA 身份验证。

    您选择的身份验证方法取决于 reCAPTCHA 已设置完毕。下表可帮助您选择适当的身份验证方法和支持的接口来设置身份验证:

    环境 接口 身份验证方法
    Google Cloud
    • REST
    • 客户端库
    使用关联的服务账号
    本地或其他云服务提供商 REST 使用 API 密钥工作负载身份联合

    如果您想使用 API 密钥,我们建议您通过应用 API 密钥限制来保护 API 密钥。

    客户端库

    使用以下资源:

  • 选择不经常被用户更改的稳定账号标识符 accountId 并在 projects.assessments.create 方法。这个稳定的账号标识符应该包含 与同一用户相关的所有事件都使用相同的值。您可以提供以下账号标识符:

    用户标识符

    如果每个账号都可以与稳定的用户名、电子邮件地址或电话号码进行唯一关联,您可以将其用作 accountId。如果您提供此类跨网站 标识符(可在不同网站上重复使用的标识符),reCAPTCHA 将使用此 根据跨网站模型, 举报存在滥用行为的账号标识符,以及利用对跨网站滥用模式的了解 这些标识符

    或者,如果您有与每个账号唯一关联的内部用户 ID,则可以将其作为 accountId 提供。

    经过哈希处理或加密

    如果您没有每个账号唯一关联的内部用户 ID,则可以 任何稳定的标识符转换为不透明的网站专用账号标识符。reCAPTCHA 账号卫士仍需要此标识符来了解用户活动模式并检测异常行为,但不会与其他网站共享此标识符。

    选择任何稳定的账号标识符,并使用加密或哈希处理使其不透明,然后再发送到 reCAPTCHA:

    • 加密(推荐):使用确定性对账号标识符进行加密 这种加密方法可生成稳定的密文。有关详细说明,请参阅 加密数据 确定性地。如果您选择对称加密而非哈希处理,则无需在用户标识符与相应的不透明用户标识符之间保留映射。 解密 reCAPTCHA 返回的不透明标识符,将其转换为用户标识符。

    • 哈希方法:我们建议使用 SHA256-HMAC 方法对账号标识符进行哈希处理 自选盐由于哈希值是单向的,因此您需要在生成的哈希值和用户标识符之间保持映射,以便将返回的经过哈希处理的账号标识符映射回原始账号。

accountId 参数和采用 E.164 格式的电话号码添加为 UserId,以便在 projects.assessments.create 方法的评估中进行验证。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的 Google Cloud 项目 ID。
  • TOKEN:从 grecaptcha.enterprise.execute() 调用返回的令牌。
  • KEY_ID:您在网站上安装的基于得分的密钥。
  • ACCOUNT_ID:用户账号的标识符,该标识符应是您网站上唯一的。
  • PHONE_NUMBER:需要检查是否存在恶意行为的电话号码。手机号码必须采用 E.164 格式,且不得进行哈希处理或加密。

HTTP 方法和网址:

POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments

请求 JSON 正文:


{
  "event": {
    "token": "TOKEN",
    "siteKey": "KEY_ID",
    "userInfo": {
      "accountId": "ACCOUNT_ID",
      "userIds": [
        {
          "phoneNumber": "PHONE_NUMBER"
        }
      ]
    }
  }
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments" | Select-Object -Expand Content

您应该收到类似以下内容的 JSON 响应:


{
  "event": {
     …
  },
  "name": "ASSESSMENT_ID",
  "smsFraudAssessment": {
    "smsFraudRisk": 0.3
  }
}

您收到的回复包括 smsFraudRisk 得分,位于 smsFraudAssessment 字段。得分越高,电话号码越有可能存在风险;得分越低,电话号码越有可能合法。

您要对自己根据知识评测采取的措施负责。 如需进行最简单的集成,您可以在 smsFraudRisk 上设置阈值,以便为您的决策提供参考。

为评估添加注释

要跟踪短信流量并改进欺诈检测功能,您必须 在发送短信后 10 分钟内为评估结果添加注释,或 在手机号码成功验证后发送。

如需为评估添加注释,请向 projects.assessments.annotate 方法发送包含评估 ID 的请求。在该请求的正文中,在 phoneAuthenticationEvent 字段中添加采用 E.164 格式的电话号码。

如需为评估添加注解,请执行以下操作:

  1. 根据您的使用场景确定要在请求 JSON 正文中添加的信息和标签。

    下表列出了可用于添加注释的标签和值 事件:

    标签 说明 请求示例
    reasons

    必需。用于支持评估的标签。

    在 事件发生后几秒或几分钟内显示的“reasons”标签 因为它们会影响实时检测。

    可能的值:

    • INITIATED_TWO_FACTOR:验证码 短信已发送。
    • PASSED_TWO_FACTOR:验证码是 已成功通过验证。
    • FAILED_TWO_FACTOR:验证码无效。
        {
        "reasons": ["INITIATED_TWO_FACTOR"],
        "phoneAuthenticationEvent": {
          "phoneNumber": "+18005550175"
        }
      }
    annotation

    可选。用于指示评估结果是否合法的标签。

    提供有关登录和注册事件的事实,以验证或更正 annotation 标签中的风险评估。

    可能的值:LEGITIMATEFRAUDULENT

    我们建议您在几秒钟或几分钟内发送此信息 因为这会影响实时检测。

      {
       "annotation": "LEGITIMATE"
      }
      
  2. 使用适当的标签创建注解请求。

    在使用任何请求数据之前,请先进行以下替换:

    • ASSESSMENT_ID:从 projects.assessments.create 调用返回的 name 字段的值。
    • ANNOTATION:可选。指示评估结果是合法还是欺诈的标签。
    • REASONS:支持您的注解的原因。如需查看可能值的列表,请执行以下操作: 请参阅原因值
    • PHONE_NUMBER:所评估的手机号码。手机号码必须采用 E.164 格式,且不得进行哈希处理或加密。

    HTTP 方法和网址:

    POST https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate

    请求 JSON 正文:

    {
      "annotation": ANNOTATION,
      "reasons": REASONS,
      "phoneAuthenticationEvent": {
        "phoneNumber": "PHONE_NUMBER"
      }
    }
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate"

    PowerShell

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://recaptchaenterprise.googleapis.com/v1/ASSESSMENT_ID:annotate" | Select-Object -Expand Content

    您应该会收到一个成功的状态代码 (2xx) 和一个空响应。

后续步骤