← Документация WAF / managed-rules / check-for-exposed-credentials
Настройка проверок скомпрометированных учётных данных через API
Настройте проверки скомпрометированных учётных данных с помощью Rulesets API. Вы можете сделать следующее:
- Разверните Cloudflare Exposed Credentials Check Managed Ruleset.
- Создание пользовательских правил с проверкой скомпрометированных учётных данных.
Если вы используете Terraform, см. Настройка проверок скомпрометированных учётных данных через Terraform.
Создание пользовательского правила с проверкой скомпрометированных учётных данных
Вы можете создавать правила с проверкой скомпрометированных учётных данных с помощью Rulesets API. Включите эти правила в пользовательский набор правил, который необходимо создать на уровне аккаунта, а затем разверните этот набор правил в фазе.
Правило проверки скомпрометированных учётных данных срабатывает, когда истинны и выражение правила, и результат проверки скомпрометированных учётных данных.
Чтобы проверять скомпрометированные учётные данные в пользовательском правиле, включите exposed_credential_check (объект) в определении правила. Этот объект должен содержать следующие свойства:
username_expression— выражение, выбирающее идентификатор пользователя, используемый при проверке учётных данных. Это свойство может содержать до 1024 символов.password_expression— выражение, выбирающее пароль, используемый при проверке учётных данных. Это свойство может содержать до 1024 символов.
Вы можете использовать exposed_credential_check в правилах с одним из следующих действий: rewrite, log, block, js_challenge (неинтерактивный челлендж) или challenge (Interactive Challenge). Cloudflare рекомендует использовать проверки скомпрометированных учётных данных только со следующими действиями: rewrite и log.
Чтобы создать и развернуть пользовательский набор правил, следуйте процессу, описанному в Работа с пользовательскими наборами правил.
Пример A
Этот POST — пример запроса, который создаёт новый пользовательский набор правил с правилом проверки скомпрометированных учётных данных. Правило срабатывает, если истинны и выражение правила, и exposed_credential_check — true. При совпадении правило залогирует запрос со скомпрометированными учётными данными в логах Cloudflare.
Необходимые разрешения API-токена
Хотя бы одно из следующих разрешения токена обязательно:Account WAF WriteAccount Rulesets Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/rulesets" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "Custom Ruleset A",
"kind": "custom",
"description": "This ruleset includes a rule checking for exposed credentials.",
"rules": [
{
"action": "log",
"description": "Exposed credentials check on login.php page",
"expression": "http.request.method == \"POST\" && http.request.uri == \"/login.php\"",
"exposed_credential_check": {
"username_expression": "url_decode(http.request.body.form[\"username\"][0])",
"password_expression": "url_decode(http.request.body.form[\"password\"][0])"
}
}
],
"phase": "http_request_firewall_custom"
}'В ответе возвращается созданный набор правил. Обратите внимание на наличие exposed_credential_check в определении правила.
{
"result": {
"id": "<CUSTOM_RULESET_ID>",
"name": "Custom Ruleset A",
"description": "This ruleset includes a rule checking for exposed credentials.",
"kind": "custom",
"version": "1",
"rules": [
{
"id": "<CUSTOM_RULE_ID>",
"version": "1",
"action": "log",
"description": "Exposed credentials check on login.php page",
"expression": "http.request.method == \"POST\" && http.request.uri == \"/login.php\"",
"exposed_credential_check": {
"username_expression": "url_decode(http.request.body.form[\"username\"][0])",
"password_expression": "url_decode(http.request.body.form[\"password\"][0])"
},
"last_updated": "2021-03-19T10:48:04.057775Z",
"ref": "<CUSTOM_RULE_REF>",
"enabled": true
}
],
"last_updated": "2021-03-19T10:48:04.057775Z",
"phase": "http_request_firewall_custom"
},
"success": true,
"errors": [],
"messages": []
}В примере используется url_decode() — поскольку поля тела запроса (доступные в http.request.body.form) URL-кодируются, когда тип содержимого — application/x-www-form-urlencoded.
После создания пользовательского набора правил разверните его в фазе, чтобы он выполнялся. Для развёртывания пользовательского набора правил понадобится его ID. Дополнительную информацию см. в Развёртывание пользовательского набора правил.
Пример B
Этот POST — пример запроса, который создаёт новый пользовательский набор правил с правилом проверки скомпрометированных учётных данных в JSON-ответах. Правило срабатывает, если истинны и выражение правила, и exposed_credential_check — true. При совпадении правило добавит Exposed-Credential-Check HTTP-заголовок к запросу со значением 1.
Необходимые разрешения API-токена
Хотя бы одно из следующих разрешения токена обязательно:Account WAF WriteAccount Rulesets Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/rulesets" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "Custom Ruleset B",
"kind": "custom",
"description": "This ruleset includes a rule checking for exposed credentials.",
"rules": [
{
"action": "rewrite",
"action_parameters": {
"headers": {
"Exposed-Credential-Check": {
"operation": "set",
"value": "1"
}
}
},
"description": "Exposed credentials check on login endpoint with JSON body",
"expression": "http.request.method == \"POST\" && http.request.uri == \"/login.php\" && any(http.request.headers[\"content-type\"][*] == \"application/json\")",
"exposed_credential_check": {
"username_expression": "lookup_json_string(http.request.body.raw, \"username\")",
"password_expression": "lookup_json_string(http.request.body.raw, \"password\")"
}
}
],
"phase": "http_request_firewall_custom"
}'В ответе возвращается созданный набор правил. Обратите внимание на следующие элементы в определении правила:
-
rewrite(действие). -
action_parametersобъект, настраивающий HTTP-заголовок, добавляемый к запросам со скомпрометированными учётными данными. -
exposed_credential_check(объект).
{
"result": {
"id": "<CUSTOM_RULESET_ID>",
"name": "Custom Ruleset B",
"description": "This ruleset includes a rule checking for exposed credentials.",
"kind": "custom",
"version": "1",
"rules": [
{
"id": "<CUSTOM_RULE_ID>",
"version": "1",
"action": "rewrite",
"action_parameters": {
"headers": {
"Exposed-Credential-Check": {
"operation": "set",
"value": "1"
}
}
},
"description": "Exposed credentials check on login endpoint with JSON body",
"expression": "http.request.method == \"POST\" && http.request.uri == \"/login.php\" && any(http.request.headers[\"content-type\"][*] == \"application/json\")",
"exposed_credential_check": {
"username_expression": "lookup_json_string(http.request.body.raw, \"username\")",
"password_expression": "lookup_json_string(http.request.body.raw, \"password\")"
},
"last_updated": "2022-03-19T12:48:04.057775Z",
"ref": "<CUSTOM_RULE_REF>",
"enabled": true
}
],
"last_updated": "2022-03-19T12:48:04.057775Z",
"phase": "http_request_firewall_custom"
},
"success": true,
"errors": [],
"messages": []
}После создания пользовательского набора правил разверните его в фазе, чтобы он выполнялся. Для развёртывания пользовательского набора правил понадобится его ID. Дополнительную информацию см. в Развёртывание пользовательского набора правил.