INTEGRITY Документация

Настройка проверок скомпрометированных учётных данных через API

Настройте проверки скомпрометированных учётных данных с помощью Rulesets API. Вы можете сделать следующее:

Если вы используете Terraform, см. Настройка проверок скомпрометированных учётных данных через Terraform.

Создание пользовательского правила с проверкой скомпрометированных учётных данных

Вы можете создавать правила с проверкой скомпрометированных учётных данных с помощью Rulesets API. Включите эти правила в пользовательский набор правил, который необходимо создать на уровне аккаунта, а затем разверните этот набор правил в фазе.

Правило проверки скомпрометированных учётных данных срабатывает, когда истинны и выражение правила, и результат проверки скомпрометированных учётных данных.

Чтобы проверять скомпрометированные учётные данные в пользовательском правиле, включите exposed_credential_check (объект) в определении правила. Этот объект должен содержать следующие свойства:

Вы можете использовать exposed_credential_check в правилах с одним из следующих действий: rewrite, log, block, js_challenge (неинтерактивный челлендж) или challenge (Interactive Challenge). Cloudflare рекомендует использовать проверки скомпрометированных учётных данных только со следующими действиями: rewrite и log.

Чтобы создать и развернуть пользовательский набор правил, следуйте процессу, описанному в Работа с пользовательскими наборами правил.

Пример A

Этот POST — пример запроса, который создаёт новый пользовательский набор правил с правилом проверки скомпрометированных учётных данных. Правило срабатывает, если истинны и выражение правила, и exposed_credential_checktrue. При совпадении правило залогирует запрос со скомпрометированными учётными данными в логах Cloudflare.

Необходимые разрешения API-токена

Хотя бы одно из следующих разрешения токена обязательно:
Создание набора правил аккаунта
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_checktrue. При совпадении правило добавит Exposed-Credential-Check HTTP-заголовок к запросу со значением 1.

Необходимые разрешения API-токена

Хотя бы одно из следующих разрешения токена обязательно:
Создание набора правил аккаунта
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"
	}'

В ответе возвращается созданный набор правил. Обратите внимание на следующие элементы в определении правила:

{
	"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. Дополнительную информацию см. в Развёртывание пользовательского набора правил.