本页面介绍如何使用 reCAPTCHA Enterprise 的密码泄露检测功能检测密码泄露和凭据泄露,以防止帐号盗用 (ATO) 和凭据填充攻击。借助 reCAPTCHA Enterprise,您可以在任何评估过程中定期审核用户凭据(密码),以确保凭据未遭泄露或数据泄露。为了执行这些评估,Google 使用密码安全检查功能。
准备工作
reCAPTCHA Enterprise 要求在项目上关联并启用结算功能,才能使用密码泄露检测功能。您可以使用信用卡或现有的 Google Cloud 项目结算 ID 启用结算功能。如果您需要结算方面的帮助,请与 Cloud Billing 支持团队联系。
检查是否有已泄露和泄露的凭据
如需检查一组凭据是否已被泄露,请在为登录、密码更改和密码重置等操作创建评估时,使用密码泄露检测功能。
如需检查是否存在密码泄露和凭据遭泄露的情况,请完成以下步骤:
生成请求参数
使用高度隐私保护协议所需的加密函数计算必要的请求参数。reCAPTCHA Enterprise 提供了 Java 和 TypeScript 库,可协助您生成以下字段:
如需创建密码检查验证,请创建一个
PasswordCheckVerifier
对象。PasswordCheckVerifier verifier = new PasswordCheckVerifier();
如需启动验证,请调用
PasswordCheckVerifier#createVerification
。此方法使用用户名和密码来计算用于执行密码检查的参数。PasswordCheckVerification verification = verifier.createVerification("username", "password").get();
使用验证参数创建评估。
byte[] lookupHashPrefix = verification.getLookupHashPrefix(); byte[] encryptedUserCredentialsHash = verification.getEncryptedUserCredentialsHash();
字节数组
lookupHashPrefix
和encryptedUserCredentialsHash
包含启动密码检查Assessment
所需的参数。
创建评估以检测密码泄露
使用 projects.assessments.create
方法。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:您的 Google Cloud 项目 ID
- LOOKUP_HASH_PREFIX:用户名 SHA-256 哈希前缀的前缀
- ENCRYPTED_USER_CREDENTIALS_HASH:已加密的用户凭据 Scrypt 哈希
HTTP 方法和网址:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments
请求 JSON 正文:
{ "private_password_leak_verification": { "lookup_hash_prefix": "LOOKUP_HASH_PREFIX", "encrypted_user_credentials_hash": "ENCRYPTED_USER_CREDENTIALS_HASH" } }
如需发送请求,请选择以下方式之一:
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 响应:
{ "name": "projects/698047609967/assessments/fb22000000000000", "score": 0, "reasons": [], "privatePasswordLeakVerification": { "lookupHashPrefix": "zoxZwA==", "encryptedUserCredentialsHash": "AyRihRcKaGLj/FA/r2uqQY/fzfTaDb/nEcIUMeD3Tygp", "reencryptedUserCredentialsHash": "Aw65yEbLM39ww1ridDEfx5VhkWo11tzn/R1B88Qqwr/+" "encryptedLeakMatchPrefixes": [ "n/n5fvPD6rmQPFyb4xk=", "IVQqzXsbZenaibID6OI=", ..., "INeMMndrfnlf6osCVvs=", "MkIpxt2x4mtyBnRODu0=", "AqUyAUWzi+v7Kx03e6o="] } }
验证评估中泄露的凭据
从评估响应中提取 reEncryptedUserCredentials
和 encryptedLeakMatchPrefixes
字段,并将其传递给验证程序对象,以确定凭据是否泄露。
PasswordCheckResult result = verifier.verify(verification,
result.getReEncryptedUserCredentials(),
result.getEncryptedLeakMatchPrefixes()
).get();
System.out.println("Credentials leaked: " + result.areCredentialsLeaked());
解读判定并采取行动
评估响应会显示凭据是否泄露,并为您提供相关信息,以便您采取适当措施来保护用户。
下表列出了检测到密码泄露时您可以采取的推荐措施:
检测到密码已泄露 | 为了保护用户而采取的措施 |
---|---|
登录期间 |
|
在创建帐号或重设密码期间 |
|
如果您尚未在网站上使用 MFA 提供商,则可以使用 reCAPTCHA Enterprise 的 MFA 功能。
代码示例
Java
如需向 reCAPTCHA Enterprise 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js (TypeScript)
如需向 reCAPTCHA Enterprise 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
后续步骤
- 了解如何使用多重身份验证 (MFA)
- 了解如何使用 reCAPTCHA Enterprise 账号保护程序保护用户帐号