泄露凭据流量检测会扫描传入请求,查找此前在数据泄露 ↗中泄露的凭据(用户名和密码)。
启用泄露凭据检测后,Cloudflare 会扫描传入 HTTP 请求中的用户名和密码。扫描会检查常见 Web 应用程序的身份验证模式以及您配置的任何自定义检测位置。
检测到的凭据会与已知泄露凭据数据库进行比对。该数据库包括:
- Have I Been Pwned (HIBP) ↗ 匹配密码数据集(仅密码)
- Cloudflare 收集的凭据(用户名)
- 泄露凭据对(用户名和密码)
根据结果,Cloudflare 会为已扫描的请求填充泄露凭据字段。您可以通过两种方式使用这些字段:
- 分析流量:在 Security Analytics 仪表板中审查检测结果,了解泄露凭据在您的流量中出现的频率。
- 创建规则:在自定义规则或速率限制规则中使用这些字段,以质询或拦截包含已泄露凭据的请求。
泄露凭据可能因不同原因出现在您的流量中。攻击者可能正在进行凭据填充 ↗攻击,或者合法用户可能在重复使用此前已泄露的密码。
泄露凭据检测提供一个托管转换,向匹配的请求添加 Exposed-Credential-Check 请求标头。标头值指示泄露内容 — 例如,如果用户名和密码均为泄露对则为 1,如果用户名已泄露则为 2,如果仅密码已泄露则为 4。
您可以在源站使用此标头警告用户并提示他们重置密码。
有关各计划可用功能的详细信息,请参阅流量检测页面中的 Availability。
泄露凭据检测包含用于在以下知名 Web 应用程序的 HTTP 请求中识别凭据的规则:
- Drupal
- Joomla
- Ghost
- Magento
- Plone
- WordPress
- Microsoft Exchange OWA
此外,扫描还包含适用于其他常见 Web 身份验证模式的通用规则。
您也可以配置自定义检测位置,以适配 Web 应用程序中使用的特定身份验证机制。自定义检测位置会告诉 Cloudflare WAF 在 Web 应用程序的 HTTP 请求中何处查找用户名和密码。
默认扫描覆盖常见 Web 应用程序,但您的应用程序可能以不同的格式或字段名发送凭据。自定义检测位置允许您确切告诉 Cloudflare 在 HTTP 请求中何处查找用户名和密码。
例如,如果对用户进行身份验证的 HTTP 请求 JSON 正文如下所示:
{ "user": "<username>", "secret": "<password>" }您可以使用以下设置配置自定义检测位置:
- 用户名的自定义位置:
lookup_json_string(http.request.body.raw, "user") - 密码的自定义位置:
lookup_json_string(http.request.body.raw, "secret")
指定自定义检测位置时,仅要求用户名字段的位置。
下表包含不同类型请求的检测位置示例:
| 请求类型 | 用户名位置 / 密码位置 |
|---|---|
| JSON 正文 | lookup_json_string(http.request.body.raw, "user")lookup_json_string(http.request.body.raw, "secret") |
| URL 编码表单 | url_decode(http.request.body.form["user"][0])url_decode(http.request.body.form["secret"][0]) |
| Multipart 表单 | url_decode(http.request.body.multipart["user"][0])url_decode(http.request.body.multipart["secret"][0]) |
用于指定自定义检测位置的表达式可以包含以下字段和函数:
- 字段:
- 函数:
有关配置自定义检测位置的说明,请参阅快速入门。
以下字段指示 Cloudflare 检测到的泄露凭据匹配类型。在自定义规则或速率限制规则中使用这些字段,以对包含已泄露凭据的请求采取措施。
| 字段 | 描述 |
|---|---|
Password Leaked cf.waf.credential_check.password_leaked Boolean |
指示请求中检测到的密码是否此前已泄露。 所有计划均可用。 |
User and Password Leaked cf.waf.credential_check.username_and_password_leaked Boolean |
指示请求中检测到的用户名-密码对是否此前已泄露。 需要 Pro 或更高计划。 |
Username Leaked cf.waf.credential_check.username_leaked Boolean |
指示请求中检测到的用户名是否此前已泄露。 需要 Enterprise 计划。 |
Similar Password Leaked cf.waf.credential_check.username_password_similar Boolean |
指示请求中检测到的用户名和密码凭据的相似版本是否此前已泄露。 需要 Enterprise 计划。 |
Authentication detected cf.waf.auth_detected Boolean |
指示 Cloudflare 是否在请求中检测到身份验证凭据。 需要 Enterprise 计划。 |