INTEGRITY Dokumentace

Konfigurace kontrol odhalených přihlašovacích údajů přes API

Nakonfigurujte kontroly odhalených přihlašovacích údajů pomocí Rulesets API. Můžete provést následující:

Pokud používáte Terraform, viz Konfigurace kontrol odhalených přihlašovacích údajů pomocí Terraformu.

Vytvoření vlastního pravidla kontrolujícího odhalené přihlašovací údaje

Pravidla kontrolující odhalené přihlašovací údaje můžete vytvářet pomocí Rulesets API. Zahrňte tato pravidla do vlastní sady pravidel, kterou musíte vytvořit na úrovni účtu, a poté vlastní sadu pravidel nasaďte do fáze.

Pravidlo kontrolující odhalené přihlašovací údaje má shodu, když jsou pravdivé jak výraz pravidla, tak výsledek kontroly odhalených přihlašovacích údajů.

Ke kontrole odhalených přihlašovacích údajů ve vlastním pravidle zahrňte exposed_credential_check objekt v definici pravidla. Tento objekt musí mít následující vlastnosti:

Můžete použít exposed_credential_check objekt v pravidlech s jednou z následujících akcí: rewrite, log, block, js_challenge (Non-Interactive Challenge), nebo challenge (Interactive Challenge). Cloudflare doporučuje používat kontroly odhalených přihlašovacích údajů pouze s následujícími akcemi: rewrite a log.

Vlastní sadu pravidel vytvoříte a nasadíte podle postupu popsaného v Práce s vlastními sadami pravidel.

Příklad A

Tento POST příklad požadavku vytvoří novou vlastní sadu pravidel s pravidlem, které kontroluje odhalené přihlašovací údaje. Pravidlo má shodu, pokud jsou splněny jak výraz pravidla, tak i exposed_credential_check výsledek jsou true. Při shodě pravidlo zaloguje požadavek s odhalenými přihlašovacími údaji do logů Cloudflare.

Požadovaná oprávnění API tokenu

Alespoň jedno z následujících oprávnění tokenu je vyžadováno:
Vytvoření rulesetu účtu
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"
	}'

Odpověď vrací vytvořenou sadu pravidel. Všimněte si přítomnosti exposed_credential_check objekt v definici pravidla.

{
	"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": []
}

Příklad používá url_decode() funkci, protože pole v těle požadavku (dostupná v http.request.body.form) jsou URL-encoded, když je content type application/x-www-form-urlencoded.

Po vytvoření vlastní sady pravidel ji nasaďte do fáze, aby se vykonávala. K nasazení vlastní sady pravidel budete potřebovat její ID. Více informací najdete v Nasazení vlastní sady pravidel.

Příklad B

Tento POST příklad požadavku vytvoří novou vlastní sadu pravidel s pravidlem kontrolujícím odhalené přihlašovací údaje v odpovědích JSON. Pravidlo má shodu, pokud jsou splněny jak výraz pravidla, tak i exposed_credential_check výsledek jsou true. Při shodě pravidlo přidá Exposed-Credential-Check HTTP hlavičku k požadavku s hodnotou 1.

Požadovaná oprávnění API tokenu

Alespoň jedno z následujících oprávnění tokenu je vyžadováno:
Vytvoření rulesetu účtu
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"
	}'

Odpověď vrací vytvořenou sadu pravidel. Všimněte si přítomnosti následujících prvků v definici pravidla:

{
	"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": []
}

Po vytvoření vlastní sady pravidel ji nasaďte do fáze, aby se vykonávala. K nasazení vlastní sady pravidel budete potřebovat její ID. Více informací najdete v Nasazení vlastní sady pravidel.