← Документация WAF / detections / ai-security-for-apps
Обнаружение PII
AI Security for Apps (ранее Firewall for AI) умеет обнаруживать персональные данные (PII) во входящих промптах LLM. Есть два подхода к обнаружению PII, и их можно использовать вместе для многоуровневой защиты:
- Обнаружение на основе AI, AI Security for Apps использует модель AI для выявления распространённых типов PII в содержимом промпта. Такой подход обнаруживает PII, даже если они представлены в естественном языке или нестандартном формате.
- Точное обнаружение (регулярное выражение), Вы пишете пользовательское правило WAF с регулярным выражением по необработанному телу запроса. Такой подход отлично подходит для идентификаторов, специфичных для организации, с известным предсказуемым форматом.
Обнаружение PII на основе AI
Когда AI Security for Apps включена и запрос поступает на cf-llm конечной точки с этой меткой, промпт сканируется на наличие PII, и заполняются два поля:
- LLM PII detected (
cf.llm.prompt.pii_detected),trueесли были обнаружены какие-либо PII. - LLM PII categories (
cf.llm.prompt.pii_categories): массив конкретных обнаруженных типов PII.
Обнаружение работает на основе AI-модели распознавания именованных сущностей (NER). См. cf.llm.prompt.pii_categories справочник по полю полный список распознаваемых категорий.
Поддерживаемые категории PII
| Категория | Описание |
|---|---|
BANK_ACCOUNT |
Номер банковского счёта |
CREDIT_CARD |
Номер кредитной карты |
DATE_TIME |
Выражение даты или времени |
DRIVER_LICENSE |
Номер водительского удостоверения |
EMAIL_ADDRESS |
Адрес электронной почты |
IP_ADDRESS |
Адрес IPv4 |
LOCATION |
Физическое местоположение или адрес |
PASSPORT |
Номер паспорта |
PERSON |
Полное или частичное имя физического лица |
PHONE_NUMBER |
Номер телефона |
TAX_ID |
Идентификационный номер налогоплательщика |
US_SSN |
Номер социального страхования США |
URL |
URL |
Формулируйте точнее, чтобы снизить количество ложных срабатываний
cf.llm.prompt.pii_detected поле возвращает true когда обнаружена любая категория PII, включая широкие категории, такие как PERSON, DATE_TIME, а также LOCATION которые часто встречаются в обычном общении. Блокировка только на основании этого поля приведёт к высокой доле ложных срабатываний для большинства приложений.
Вместо этого создавайте правила на основе cf.llm.prompt.pii_categories и указывайте только те категории, которые важны для вашего сценария использования. Например, чат-боту службы поддержки может понадобиться блокировать номера банковских карт и номера социального страхования (SSN), но можно спокойно игнорировать имена людей и даты. Начните с самого узкого набора категорий и отслеживайте совпадения в Security Analytics, и расширяйте его только по мере необходимости.
Пример правил: обнаружение на основе AI
Блокировать любой запрос, содержащий PII
-
Когда входящие запросы соответствуют:
Поле Оператор Значение LLM PII Detected равно True Выражение при использовании редактора:
(cf.llm.prompt.pii_detected) -
Действие: Block
Блокировать только определённые категории PII
-
Когда входящие запросы соответствуют:
Поле Оператор Значение LLM PII Categories входит в Credit CardВыражение при использовании редактора:
(any(cf.llm.prompt.pii_categories[*] in {"CREDIT_CARD"})) -
Действие: Block
Регистрировать адреса электронной почты, но блокировать номера банковских карт и номера социального страхования (SSN)
Создание двух пользовательские правила:
-
Правило с действием Block и следующее выражение:
(any(cf.llm.prompt.pii_categories[*] in {"CREDIT_CARD" "US_SSN"})) -
Правило с действием Log и следующее выражение:
(any(cf.llm.prompt.pii_categories[*] in {"EMAIL_ADDRESS"}))
Точное обнаружение PII (регулярное выражение)
Если вам нужно обнаружить пользовательские форматы PII характерные для вашей организации, такие как внутренние ID сотрудников, номера медицинских карт пациентов или уникальные идентификаторы учётных записей, вы можете создать WAF пользовательское правило с помощью сопоставления по регулярному выражению в необработанном теле (http.request.body.raw поле).
Этот подход дополняет обнаружение на основе AI сопоставлением с заранее заданными шаблонами, включая идентификаторы, специфичные для организации.
Пример: обнаружение ID сотрудников
В следующем примере организация использует ID сотрудников в формате EMP- с последующими ровно шестью цифрами (например, EMP-482910).
Создание пользовательского правила со следующей конфигурацией:
-
Когда входящие запросы соответствуют:
Поле Оператор Значение Необработанное тело запроса matches regex EMP-[0-9]{6}Выражение при использовании редактора:
(http.request.body.raw matches "EMP-[0-9]{6}") -
Действие: Block
-
С типом ответа: Custom JSON
-
Тело ответа:
{ "error": "Request blocked: employee ID detected in prompt." }
Область действия для конкретной конечной точки
Чтобы ограничить это правило только конечной точкой LLM, объедините его с условием по пути:
| Поле | Оператор | Значение | Логика |
|---|---|---|---|
| URI Path | равно | /api/chat |
И |
| Необработанное тело запроса | matches regex | EMP-[0-9]{6} |
Выражение при использовании редактора:
(http.request.uri.path eq "/api/chat" and http.request.body.raw matches "EMP-[0-9]{6}")
Другие примеры регулярных выражений
| Пользовательский тип PII | Пример формата | Шаблон регулярного выражения |
|---|---|---|
| Идентификатор сотрудника | EMP-482910 |
EMP-[0-9]{6} |
| Номер медицинской карты пациента | PAT/2024/00391 |
PAT/[0-9]{4}/[0-9]{5} |
| Внутренний ID аккаунта | ACCT-XX-99999 |
ACCT-[A-Z]{2}-[0-9]{5} |
| Пользовательский префикс API-ключа | sk_live_abc123... |
sk_live_[a-zA-Z0-9]{20,} |
Что учитывать для правил с регулярными выражениями
- Требование к тарифному плану Cloudflare. Операторы регулярных выражений (
matchesи~) требуют тарифного плана Business или Enterprise. - Лимит размера тела. Заголовок
http.request.body.rawполе проверяет только ограниченную часть тела запроса. Точный лимит зависит от тарифного плана. - Полезные нагрузки JSON. Необработанное тело запроса включает полную структуру JSON. Ваше регулярное выражение должно учитывать, что текст запроса вложен внутрь строки JSON.
- Производительность. Сложные регулярные выражения могут увеличивать время обработки правила. Делайте шаблоны как можно более конкретными.
Комбинируйте оба подхода
Для многоуровневой защиты можно использовать одновременно обнаружение на основе ИИ и точное обнаружение:
(cf.llm.prompt.pii_detected or http.request.body.raw matches "EMP-[0-9]{6}")
Это правило блокирует запросы, в которых либо AI-модель обнаруживает любую встроенную категорию PII, либо регулярное выражение совпадает с вашим пользовательским форматом идентификатора.