Типы PII¶
PII Detector поддерживает 20+ типов персональных данных на русском и английском языках.
Input PII (обнаружение в запросах пользователя)¶
Контактные данные¶
EMAIL — Электронная почта
| Свойство | Значение |
|---|---|
| Метод детекции | Regex + валидация RFC 5322 |
| Библиотека валидации | email_validator |
| Confidence (regex) | 0.95 |
| Confidence (после валидации) | 0.97 |
| Примеры | user@example.com, john.doe+tag@company.co.uk |
| Маска | j***@***.com |
PHONE — Телефонный номер
| Свойство | Значение |
|---|---|
| Метод детекции | Regex (9 паттернов) + валидация libphonenumber |
| Библиотека валидации | phonenumbers (Google libphonenumber) |
| Confidence (regex) | 0.85 |
| Confidence (после валидации) | 0.90 |
| Поддерживаемые форматы | Россия (+7, 8), международные (+1, +44, ...), US (XXX) XXX-XXXX |
| Примеры | +7 (903) 123-45-67, 89031234567, +1 (555) 123-4567 |
| Маска | +7 (***) ***-**-67 |
Паттерны для российских номеров:
+7 (XXX) XXX-XX-XX— канонический.+7-XXX-XXX-XX-XX— через дефис.+7XXXXXXXXXX— компактный.8 (XXX) XXX-XX-XX— внутренний (prefix 8).8XXXXXXXXXX— компактный внутренний.
IP_ADDRESS — IP-адрес
| Свойство | Значение |
|---|---|
| Метод детекции | Regex + валидация октетов (0–255, без ведущих нулей) |
| Confidence | 0.90 |
| Примеры | 192.168.1.100, 10.0.0.1 |
| Маска | ***.***.***.100 |
Финансовые данные¶
CREDIT_CARD — Номер кредитной карты
| Свойство | Значение |
|---|---|
| Метод детекции | Regex (4 паттерна) + Luhn algorithm |
| Confidence (regex) | 0.90 |
| Confidence (после Luhn) | 0.95 |
| Поддерживаемые сети | Visa (4xxx), MasterCard (51xx–55xx), Amex (34xx/37xx), Discover (6011/65xx) |
| Форматы | 4111111111111111, 4111-1111-1111-1111, 4111 1111 1111 1111 |
| Маска | ****-****-****-1111 (последние 4 цифры сохраняются) |
Алгоритм Luhn (валидация):
Номер: 4111 1111 1111 1111
1. Удалить пробелы/дефисы → 4111111111111111
2. Справа налево, удвоить каждую вторую цифру
3. Если результат > 9, вычесть 9
4. Сумма всех цифр должна делиться на 10
→ Valid (сумма = 0 mod 10)
IBAN — International Bank Account Number
| Свойство | Значение |
|---|---|
| Метод детекции | Regex |
| Confidence | 0.92 |
| Формат | 2 буквы (страна) + 2 контрольные цифры + 10–30 алфанумерических |
| Примеры | DE89370400440532013000, GB29 NWBK 6016 1331 9268 19 |
SWIFT_BIC — SWIFT/BIC-код банка
| Свойство | Значение |
|---|---|
| Метод детекции | Regex |
| Confidence | 0.88 |
| Формат | 8 или 11 символов: 4 (банк) + 2 (страна) + 2 (локация) + 3 (филиал, опционально) |
| Примеры | DEUTDEFF, SABRRUMM |
Государственные идентификаторы¶
INN — Индивидуальный номер налогоплательщика (Россия)
| Свойство | Значение |
|---|---|
| Метод детекции | Regex + контекст + checksum-валидация ФНС |
| Confidence (bare, без контекста) | 0.75 |
| Confidence (с контекстом «ИНН», «inn») | 0.92 |
| Confidence (после checksum) | 0.95 |
| Форматы | 10 цифр (физлицо) или 12 цифр (юрлицо) |
| Примеры | 7707083893 (10 цифр), 500100732259 (12 цифр) |
| Маска | ********** |
Алгоритм checksum ФНС:
10-значный ИНН:
weights = [2, 4, 10, 3, 5, 9, 4, 6, 8]
check = (Σ weights[i] × digit[i], i=0..8) mod 11 mod 10
Валиден, если check == digit[9]
12-значный ИНН:
weights_11 = [7, 2, 4, 10, 3, 5, 9, 4, 6, 8]
check_11 = (Σ weights_11[i] × digit[i], i=0..9) mod 11 mod 10
weights_12 = [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8]
check_12 = (Σ weights_12[i] × digit[i], i=0..10) mod 11 mod 10
Валиден, если check_11 == digit[10] AND check_12 == digit[11]
SNILS — Страховой номер индивидуального лицевого счёта (Россия)
| Свойство | Значение |
|---|---|
| Метод детекции | Regex + контекст + checksum-валидация ПФР |
| Confidence (форматированный) | 0.80 |
| Confidence (с контекстом) | 0.95 |
| Confidence (после checksum) | 0.95 |
| Форматы | XXX-XXX-XXX XX (форматированный), XXXXXXXXXXX (11 цифр, с контекстом) |
| Примеры | 112-233-445 95, 11223344595 |
| Маска | ***-***-*** ** |
Алгоритм checksum ПФР:
СНИЛС: 112-233-445 95 → цифры: [1,1,2,2,3,3,4,4,5] + контроль [9,5]
total = Σ digit[i] × (9 - i), i=0..8
total = 1×9 + 1×8 + 2×7 + 2×6 + 3×5 + 3×4 + 4×3 + 4×2 + 5×1 = 95
expected = total mod 101 mod 100 = 95
Валиден, если expected == 95 (контрольное число)
PASSPORT — Паспорт РФ
| Свойство | Значение |
|---|---|
| Метод детекции | Regex + контекст обязателен (слова «паспорт», «серия», «passport» в радиусе 50 символов) |
| Confidence (без контекста) | 0.70 |
| Confidence (с контекстом) | 0.92 |
| Формат | Серия (2+2 цифры) + номер (6 цифр): XX XX XXXXXX или XXXX XXXXXX |
| Примеры | 45 12 123456, 4512 123456 |
| Маска | ** ** ****** |
SSN — Social Security Number (США)
| Свойство | Значение |
|---|---|
| Метод детекции | Regex |
| Confidence | 0.90 |
| Формат | XXX-XX-XXXX или XXX XX XXXX |
| Примеры | 123-45-6789 |
Персональные данные (NER)¶
PERSON_NAME — ФИО / Имя
| Свойство | Значение |
|---|---|
| Метод детекции | NER |
| Confidence (EN) | 0.70 |
| Confidence (RU) | 0.70 |
| Confidence (RU, расширенный) | 0.82 (выше за счёт лучшей обработки падежей) |
| Примеры | Иванов Иван Иванович, John Doe, Петрову Алексею (дательный падеж) |
| Фильтрация FP | Стоп-лист: местоимения (Он, Она, Они), служебные слова (Данные, Номер, Запрос) |
ORGANIZATION — Организация
| Свойство | Значение |
|---|---|
| Метод детекции | NER |
| Confidence (EN) | 0.68 |
| Confidence (RU) | 0.78 |
| Статус | Отключён по умолчанию (высокий FPR — обычные слова распознаются как организации) |
| Примеры | ООО "Ромашка", Google, Сбербанк |
DATE_OF_BIRTH — Дата рождения
| Свойство | Значение |
|---|---|
| Метод детекции | Regex + контекст (слова «родился», «дата рождения», «д.р.», «dob» в радиусе 80 символов) |
| Confidence (NER) | 0.60 |
| Confidence (regex + контекст) | 0.88 |
| Форматы | DD.MM.YYYY (01.01.1990), текстовый (15 марта 1985 года) |
Токены и секреты¶
JWT_TOKEN — JSON Web Token
| Свойство | Значение |
|---|---|
| Метод детекции | Regex (структурный паттерн) |
| Confidence | 0.99 |
| Паттерн | eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+ |
| Примеры | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjg... |
API_KEY — API-ключи различных сервисов
| Свойство | Значение |
|---|---|
| Метод детекции | Regex (структурные паттерны по провайдерам) |
| Confidence | 0.95–0.99 |
Конкретные паттерны:
| Провайдер | Префикс | Паттерн | Confidence |
|---|---|---|---|
| OpenAI | sk- |
sk-[A-Za-z0-9]{48} |
0.99 |
| Anthropic | sk-ant- |
sk-ant-[A-Za-z0-9\-]{95,} |
0.99 |
AIza |
AIza[0-9A-Za-z_-]{35} |
0.99 | |
| AWS Access Key | AKIA |
AKIA[0-9A-Z]{16} |
0.99 |
| Generic (с контекстом) | — | Контекст api_key=, api_secret= + [A-Za-z0-9_-]{20,} |
0.95 |
GITHUB_TOKEN — Токены GitHub
| Свойство | Значение |
|---|---|
| Метод детекции | Regex (5 структурных паттернов) |
| Confidence | 0.99 |
| Тип | Префикс | Назначение |
|---|---|---|
| Personal access token | ghp_ |
Доступ к API GitHub |
| OAuth access token | gho_ |
OAuth-приложения |
| User-to-server token | ghu_ |
GitHub Apps (user) |
| Server-to-server token | ghs_ |
GitHub Apps (server) |
| Refresh token | ghr_ |
Обновление токенов |
PASSWORD — Пароли (с контекстом)
| Свойство | Значение |
|---|---|
| Метод детекции | Regex + контекст обязателен |
| Confidence | 0.95 |
| Контекстные слова | password=, passwd=, pwd=, пароль=, user_password= |
| Примеры | password=MySecr3t!, пароль: qwerty123 |
Output PII (обнаружение в ответах LLM)¶
Все Input PII типы также обнаруживаются в ответах. Дополнительно — 6 типов, специфичных для утечек из LLM:
DATABASE_URI — Строки подключения к базам данных
| Свойство | Значение |
|---|---|
| Confidence | 0.99 |
| Поддерживаемые СУБД | PostgreSQL, MySQL, MongoDB (+SRV), Redis, AMQP, MSSQL, Elasticsearch, SQLite, ADO.NET |
| Примеры | postgresql://admin:secret@prod-db:5432/main, mongodb+srv://user:pass@cluster.mongodb.net/db, Server=db;Database=main;User=sa;Password=secret |
PRIVATE_KEY — Приватные ключи (PEM-формат)
| Свойство | Значение |
|---|---|
| Confidence | 0.99 |
| Поддерживаемые типы | RSA, EC, DSA, OpenSSH |
| Паттерн | -----BEGIN [RSA\|EC\|DSA\|OPENSSH ]PRIVATE KEY----- ... -----END ... PRIVATE KEY----- |
ENV_VAR_SECRET — Секреты в переменных окружения
| Свойство | Значение |
|---|---|
| Confidence | 0.97 |
| Паттерны | SECRET_KEY=value, export PASSWORD=value, os.environ["API_KEY"], os.getenv("JWT_SECRET", "value") |
| Контекстные имена | SECRET, PASSWORD, PASSWD, PWD, API_KEY, JWT_SECRET, DATABASE_URL, PRIVATE_KEY и др. |
INTERNAL_IP — Внутренние IP-адреса
| Свойство | Значение |
|---|---|
| Confidence | 0.90 |
| RFC 1918 диапазоны | 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.1 |
| Внутренние домены | *.internal, *.local, *.corp, *.intranet, *.lan |
SERVER_PATH — Серверные пути файловой системы
| Свойство | Значение |
|---|---|
| Confidence | 0.85 |
| Linux | /etc/passwd, /etc/shadow, /root/.ssh/, /var/log/, /opt/, /srv/, /proc/ |
| Windows | C:\Windows\System32, C:\Users\*\AppData, C:\inetpub\wwwroot |
SYSTEM_PROMPT_LEAK — Утечка системного промпта
| Свойство | Значение |
|---|---|
| Confidence | 0.50–0.95 (зависит от метода) |
| Метод 1 | Эвристические паттерны (8 шт.): «my instructions are...», «I was told to...», «my role is...», «You are... assistant» — confidence 0.40–0.75 |
| Метод 2 | N-gram overlap: 4-граммное сравнение ответа с известным system_prompt. При overlap ≥ 25% — confidence 0.50–0.95 пропорционально overlap |
| Требование | В настройках профиля: system_prompt_detection: true и (для метода 2) system_prompt_text: "Ваш системный промпт" |
Конфигурация детекции¶
| Параметр | Значение по умолч. | Описание |
|---|---|---|
default_threshold |
0.8 | Минимальный confidence для включения сущности в результат |
max_text_length |
100 000 символов | Максимальная длина текста для обработки |
processing_timeout |
5 секунд | Таймаут детекции |
enable_natasha_ner |
true | Включить расширенный NER для русского (повышенная точность) |
disabled_entity_types |
ORGANIZATION, DRIVER_LICENSE, TAX_ID | Типы, отключённые по умолчанию (высокий FPR) |
Порядок детекции (приоритет):