在 Free 计划中,leaked credentials detection 默认启用,无需操作。在付费计划中,可在 Cloudflare 仪表板、通过 API 或使用 Terraform 开启检测。
-
在 Cloudflare 仪表板中,前往 Security Settings(设置) 页面。
Go to Settings ↗ -
(可选)按 Detection tools 筛选。
-
开启 Leaked credential detection。
- 登录 Cloudflare 仪表板 ↗,并选择你的账户和域名。
- 前往 Security(安全性) > Settings(设置)。
- 在 Incoming traffic detections 下,开启 Leaked credentials。
使用类似以下的 POST 请求:
Required API token permissions
At least one of the following token permissions is required:Zone WAF WriteAccount WAF Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/leaked-credential-checks" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"enabled": true
}'使用 cloudflare_leaked_credential_check 资源来为区域启用泄露凭据检测。例如:
resource "cloudflare_leaked_credential_check" "zone_lcc_example" {
zone_id = var.cloudflare_zone_id
enabled = true
}使用 Security Analytics 与 HTTP 日志,验证 Cloudflare 是否正确检测传入请求中的泄露凭据。
有关可用于验证配置的测试凭据的更多信息,请参阅 测试您的配置。
或者,按下一步所述使用 Log 操作(仅对企业客户可用)创建自定义规则。此规则将生成 安全事件,使您能够验证配置。
如果您使用 Free 计划,请部署建议的 速率限制规则 模板,可在:
- 旧版仪表板:WAF > Rate limiting rules
- 新安全仪表板:Security(安全性) > Security rules(安全规则)
使用此模板部署规则后,您可立即获得防护,阻止在每 10 秒内尝试使用泄露密码访问您的应用超过五次的 IP。此规则可通过在一段时间内阻止攻击来延迟攻击。或者,您可以创建自定义规则。
付费计划在创建规则时拥有更细粒度的控制。如果您使用付费计划,请 创建自定义规则,对包含泄露凭据的请求提出质询:
| 字段 | 运算符 | 值 |
|---|---|---|
| User and Password Leaked | equals | True |
如果使用表达式编辑器,请输入以下表达式:
(cf.waf.credential_check.username_and_password_leaked)规则操作:Managed Challenge
此规则将匹配 Cloudflare 检测到先前已泄露的凭据集(用户名与密码)的请求。有关泄露凭据检测提供的字段列表,请参阅 泄露凭据字段。
与其他规则语言字段组合
您可以将先前的表达式与规则语言的其他 字段 和 函数 组合。这使您能够自定义规则范围,或将泄露凭据检查与其他安全功能结合。例如:
-
以下表达式将匹配发往身份验证端点且包含泄露凭据的请求:
字段 运算符 值 逻辑 User and Password Leaked equals True And URI Path contains /admin/login.php使用编辑器时的表达式:
(cf.waf.credential_check.username_and_password_leaked and http.request.uri.path contains "/admin/login.php") -
以下表达式将匹配来自机器人且包含身份验证凭据的请求:
字段 运算符 值 逻辑 Authentication detected equals True And Bot Score less than 10使用编辑器时的表达式:
(cf.waf.auth_detected and cf.bot_management.score lt 10)
更多示例请参阅 缓解规则示例。
此外,您可能希望在 源站服务器 处理 Cloudflare 检测到的泄露凭据:
-
开启 Add Leaked Credentials Checks Header 托管转换。
-
对于在源站收到且包含
Exposed-Credential-Check请求头的请求,您可以在检测到先前泄露的凭据时,将最终用户重定向到重置密码页面。
要以默认配置未覆盖的方式检查泄露凭据,请添加 自定义检测位置。
-
在 Cloudflare 仪表板中,前往 Security Settings(设置) 页面。
Go to Settings ↗ -
(可选)按 Detection tools(检测工具) 过滤。
-
在 Leaked credential detection(泄露凭据检测) > Configurations(配置) 下,选择编辑图标。
-
选择 Add custom username and password location(添加自定义用户名和密码位置)。
-
在 Username location(用户名位置) 与 **Password location(密码位置,可选)**中,输入用于从 HTTP 请求获取用户名与密码的表达式。例如,您可以使用以下表达式:
- Username location(用户名位置):
lookup_json_string(http.request.body.raw, "user") - Password location(密码位置):
lookup_json_string(http.request.body.raw, "secret")
此配置将扫描包含类似以下结构的 JSON 请求体的传入 HTTP 请求:
{"user": "<USERNAME>", "secret": "<PASSWORD>"}有关此函数的更多信息,请参阅
lookup_json_string()文档。 - Username location(用户名位置):
-
选择 Save(保存)。
-
登录 Cloudflare 仪表板 ↗,并选择您的账户与域名。
-
前往 Security(安全性) > Settings(设置)。
-
在 Incoming traffic detections(传入流量检测) 下,选择 Leaked credentials(泄露凭据),然后选择 Add custom username and password location(添加自定义用户名和密码位置)。
-
在 Username location(用户名位置) 与 **Password location(密码位置,可选)**中,输入用于从 HTTP 请求获取用户名与密码的表达式。例如,您可以使用以下表达式:
- Username location(用户名位置):
lookup_json_string(http.request.body.raw, "user") - Password location(密码位置):
lookup_json_string(http.request.body.raw, "secret")
此配置将扫描包含类似以下结构的 JSON 请求体的传入 HTTP 请求:
{"user": "<USERNAME>", "secret": "<PASSWORD>"}有关此函数的更多信息,请参阅
lookup_json_string()文档。 - Username location(用户名位置):
-
选择 Save(保存)。
使用类似如下的 POST 请求:
Required API token permissions
At least one of the following token permissions is required:Zone WAF WriteAccount WAF Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/leaked-credential-checks/detections" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"username": "lookup_json_string(http.request.body.raw, \"user\")",
"password": "lookup_json_string(http.request.body.raw, \"secret\")"
}'这对查找表达式(用于用户名与密码)将扫描包含类似以下结构的 JSON 请求体的传入 HTTP 请求:
{"user": "<USERNAME>", "secret": "<PASSWORD>"}有关此函数的更多信息,请参阅 lookup_json_string() 文档。
使用 cloudflare_leaked_credential_check_rule 资源来添加自定义检测位置。例如:
resource "cloudflare_leaked_credential_check_rule" "custom_location_example" {
zone_id = var.cloudflare_zone_id
username = "lookup_json_string(http.request.body.raw, \"user\")"
password = "lookup_json_string(http.request.body.raw, \"secret\")"
}有关此函数的更多信息,请参阅 lookup_json_string() 文档。
在自定义检测位置中,您只需提供用户名的表达式。
有关不同请求类型的自定义检测位置的更多示例,请参阅 自定义检测位置。
Cloudflare 提供一组区分大小写的特殊凭据,用于测试泄露凭据检测的配置。
在启用并配置检测后,您可以在测试 HTTP 请求中使用本节提到的凭据。
Free 计划用户的测试凭据(在付费计划中也可用):
- 用户名:
CF_LEAKED_USERNAME_FREE - 密码:
CF_LEAKED_PASSWORD
付费计划用户的测试凭据(在 Free 计划上不可用):
- 用户名:
CF_EXPOSED_USERNAME或[email protected] - 密码:
CF_EXPOSED_PASSWORD
Cloudflare 会将这些特定凭据视为先前已泄露。在测试中使用它们以检查当前配置的行为。