Документация Запланировать пилот

Пример правил противодействия

Возвращать пользовательскую ошибку при вопросах о жестоком или ненавистническом контенте

Чат-бот службы поддержки клиентов не должен реагировать на промпты о насильственных преступлениях или разжигании ненависти. Этот пользовательское правило блокирует запрос и возвращает ответ в формате JSON, который ваше приложение может разобрать и показать пользователю.

Ваше приложение может проверять ответ, отличный от 200, и отображать message поле пользователю, сохраняя разговорный формат общения вместо показа обычной страницы блокировки.

Блокировать попытки внедрения в промпт из автоматизированных источников за пределами вашей страны

Это правило сочетает поля AI Security for Apps показатель инъекций с Bot Management и страну запроса, чтобы сосредоточиться на атаках с высокой степенью достоверности из автоматизированных источников. Такой многоуровневый подход значительно снижает число ложных срабатываний по сравнению с использованием только одного сигнала.

Правило нацелено на запросы, которые одновременно:

  1. Вероятные попытки внедрения промптов (показатель ниже 25).
  2. Происходит от автоматизированных инструментов, а не от настоящего браузера (показатель бота ниже 10).
  3. Если трафик поступает не из США, скорректируйте код страны в соответствии с расположением ваших пользователей.

Отдельно взятый сигнал может давать ложные срабатывания. Вместе они выявляют паттерн, тесно связанный с автоматизированными атаками внедрения промпта.

Разрешить финансовые PII только из внутренней сети

Приложение финансовых услуг законно обрабатывает номера банковских карт и счетов от внутренних агентов, но должно блокировать эти типы PII от внешних пользователей. Это правило использует номер автономной системы (ASN) чтобы отличать внутренний трафик от публичного.

Внутренние агенты в корпоративной сети (определяемые по ASN) могут передавать финансовые PII ИИ-ассистенту в рамках рабочего процесса, а внешние пользователи при этом блокируются. Это правило можно дополнительно уточнить, объединив его с Доступ токены служб или mTLS для более надёжной проверки личности.

Обработка блокирующих ответов в вашем приложении

Когда правило WAF блокирует запрос, Cloudflare отправляет ответ о блокировке вашему приложению, а не конечному пользователю. Ваше приложение должно обработать этот ответ и решить, что показать. Без обработки ошибок пользователи могут увидеть необработанную HTML-страницу с ошибкой или нерабочий интерфейс.

Вот два способа сохранить бесперебойную работу для ваших пользователей.

Задайте запасное сообщение

Задайте понятное сообщение по умолчанию, которое ваше приложение будет показывать при получении неуспешного ответа. Это работает независимо от способа настройки правила блокировки, включая страницу блокировки Cloudflare по умолчанию, которая возвращает HTML, что может нарушить работу чат-интерфейса на основе JSON.

// Define a user-friendly fallback message. This is what the user will see
// any time the request is blocked or something unexpected happens.
const FALLBACK = "Sorry, I can't process that request. Please try rephrasing.";

const resp = await fetch("/api/chat", {
	method: "POST",
	headers: { "Content-Type": "application/json" },
	body: JSON.stringify({ prompt: userMessage }),
});

// If the response is not 2xx, show the fallback instead of trying to parse
// the body. This safely handles the default Cloudflare block page (which is
// HTML) without breaking your UI.
if (!resp.ok) {
	await resp.text(); // consume the body so the connection is released
	showError(FALLBACK);
	return;
}

const data = await resp.json();
showMessage(data.message);

Отображение пользовательских сообщений об ошибках от WAF

Для большего контроля настройте свои блокирующие правила с пользовательский JSON-ответ например, { "message": "That question is outside this assistant's scope." }. После этого ваше приложение может разобрать ответ и показать пользовательское сообщение, если оно доступно, а иначе использовать сообщение по умолчанию.

const FALLBACK = "Sorry, I can't process that request. Please try rephrasing.";

const resp = await fetch("/api/chat", {
	method: "POST",
	headers: { "Content-Type": "application/json" },
	body: JSON.stringify({ prompt: userMessage }),
});

if (!resp.ok) {
	// Check the content type to determine if the response contains a custom
	// JSON error from your WAF rule, or something else (like the default
	// Cloudflare HTML block page, or a DDoS / Bot Management challenge).
	const ct = (resp.headers.get("content-type") || "").toLowerCase();

	if (ct.includes("application/json")) {
		// The WAF returned your custom JSON response. Parse it and show the
		// message you configured in the rule. Fall back to the default if the
		// field is missing or empty.
		const data = await resp.json();
		showError(data.message || FALLBACK);
	} else {
		// The response is not JSON — most likely the default Cloudflare HTML
		// block page. Discard the body and show the friendly fallback.
		await resp.text();
		showError(FALLBACK);
	}
	return;
}

const data = await resp.json();
showMessage(data.message);

Запросите бесплатный пилот

Запланировать пилот