← Документация 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, Выражение, которое выбирает ID пользователя, используемый в проверке учётных данных. Это свойство может содержать до 1024 символов.password_expression, Выражение, которое выбирает пароль, используемый в проверке учётных данных. Это свойство может содержать до 1024 символов.
Вы можете использовать exposed_credential_check объект в правилах с одним из следующих действий: rewrite, log, block, js_challenge (Non-Interactive 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 набора правил. Дополнительную информацию см. в Развёртывание пользовательского набора правил.