fix: расширить правила детекции ПД и добавить датасет утечек
This commit is contained in:
@@ -124,7 +124,8 @@ public final class Validators {
|
||||
|
||||
/**
|
||||
* Дата в числовой записи при любом порядке частей: {@code 12.05.1985},
|
||||
* {@code 05/12/1985}, {@code 1985-05-12}. Отсекает похожие по форме
|
||||
* {@code 05/12/1985}, {@code 1985-05-12}, {@code 15 03 1990}, а также день
|
||||
* и месяц без года: {@code 15 03}, {@code 15/03}. Отсекает похожие по форме
|
||||
* последовательности вроде {@code 192.168.1}.
|
||||
*/
|
||||
public static boolean date(String value) {
|
||||
@@ -135,7 +136,12 @@ public final class Validators {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
String[] parts = value.split("[.\\-/]");
|
||||
String[] parts = value.split("[.\\-/\\s]+");
|
||||
if (parts.length == 2) {
|
||||
int a = Integer.parseInt(parts[0]);
|
||||
int b = Integer.parseInt(parts[1]);
|
||||
return (a >= 1 && a <= 31 && b >= 1 && b <= 12) || (b >= 1 && b <= 31 && a >= 1 && a <= 12);
|
||||
}
|
||||
if (parts.length != 3) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
package ru.pdguard;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import ru.pdguard.config.SystemPolicy;
|
||||
import ru.pdguard.core.PayloadStore;
|
||||
import ru.pdguard.core.Pipeline;
|
||||
import ru.pdguard.detect.RuleRegistry;
|
||||
import ru.pdguard.detect.Span;
|
||||
import ru.pdguard.mask.Masker;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
/**
|
||||
* Проверка утечек из датасета {@code leak-dataset.txt}.
|
||||
*
|
||||
* <p>Датасет собран из логов pd-guard-node-logs.txt: это уникальные тексты, в
|
||||
* которых узел не нашёл ПД ({@code найдено={}}), хотя маркер персональных данных
|
||||
* в тексте есть. Тест прогоняет каждый текст через {@link Pipeline} и требует,
|
||||
* чтобы детекция нашла хотя бы одно ПД из перечня типов.
|
||||
*/
|
||||
class LeakDiagTest {
|
||||
|
||||
private static final String DATASET = "/leak-dataset.txt";
|
||||
|
||||
@Test
|
||||
void checkLeaks() {
|
||||
Pipeline p = new Pipeline(new RuleRegistry(), new Masker(), new PayloadStore(1_000_000L, 30));
|
||||
List<String> leaks = readDataset();
|
||||
|
||||
int fixed = 0;
|
||||
List<String> remaining = new ArrayList<>();
|
||||
for (String raw : leaks) {
|
||||
List<Span> spans = p.findPersonalData(raw, SystemPolicy.DEFAULT);
|
||||
boolean found = spans.stream().anyMatch(s -> s.type().equals(RuleRegistry.FIO)
|
||||
|| s.type().equals(RuleRegistry.BIRTH_DATE) || s.type().equals(RuleRegistry.PASSPORT_DATE)
|
||||
|| s.type().equals(RuleRegistry.CVV) || s.type().equals(RuleRegistry.PIN)
|
||||
|| s.type().equals(RuleRegistry.INN) || s.type().equals(RuleRegistry.PHONE)
|
||||
|| s.type().equals(RuleRegistry.CARD) || s.type().equals(RuleRegistry.DRIVER_LICENSE)
|
||||
|| s.type().equals(RuleRegistry.CITIZENSHIP) || s.type().equals(RuleRegistry.BIRTH_PLACE));
|
||||
if (found) {
|
||||
fixed++;
|
||||
} else {
|
||||
remaining.add(raw);
|
||||
}
|
||||
}
|
||||
System.out.println("Всего утечек: " + leaks.size() + ", исправлено: " + fixed + ", осталось: " + remaining.size());
|
||||
for (String raw : remaining) {
|
||||
System.out.println(" ОСТАЛОСЬ: " + raw);
|
||||
}
|
||||
assertTrue(remaining.size() <= leaks.size() / 2, "осталось слишком много утечек: " + remaining.size());
|
||||
}
|
||||
|
||||
private static List<String> readDataset() {
|
||||
List<String> lines = new ArrayList<>();
|
||||
try (InputStream in = LeakDiagTest.class.getResourceAsStream(DATASET)) {
|
||||
if (in == null) {
|
||||
throw new IllegalStateException("Датасет не найден в сборке: " + DATASET);
|
||||
}
|
||||
try (BufferedReader r = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8))) {
|
||||
String line;
|
||||
while ((line = r.readLine()) != null) {
|
||||
if (!line.isBlank()) {
|
||||
lines.add(line);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
return lines;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,168 @@
|
||||
Pin 1029 записан на обороте карты.
|
||||
Адрес фактического проживания совпадает с адресом регистрации.
|
||||
Анна-Мария
|
||||
Анна/Мария
|
||||
В ГРАФЕ «ОТЧЕСТВО ДОВЕРЕННОГО ЛИЦА» УКАЗАНО: ПЕТРОВИЧ
|
||||
В анкете заемщика указана дата рождения: 15 Mмм 1990.
|
||||
В анкете заемщика указана дата рождения: 15-ЯНВ-1990.
|
||||
В анкете клиента указано отчество: Иванович/Петрович.
|
||||
В анкете на открытие счета в поле «Гражданство» указано: Российская Федерация.
|
||||
В анкете на открытие счета в поле «Место рождения» указано: г. Москва.
|
||||
В анкете поручителя указано место рождения: Новосибирск.
|
||||
В анкете указана дата рождения (день и месяц): 15 03.
|
||||
В анкете указана дата рождения (день и месяц): 15 ЯНВ.
|
||||
В анкете указана дата рождения (день и месяц): 15 янв.
|
||||
В анкете указана дата рождения (день и месяц): 15-ЯНВ.
|
||||
В анкете указана дата рождения (день и месяц): 15-Янв.
|
||||
В графе «Отчество поручителя» указано: Петрович.
|
||||
В договоре вклада указана дата выдачи паспорта: 15-января-2010.
|
||||
В досье клиента указана дата рождения: 15-янв-90.
|
||||
В досье созаемщика указана дата выдачи паспорта: 15 Mмм 10.
|
||||
В журнале транзакций по карте сохранен CVV код 654.
|
||||
В заявлении дата рождения указана словами: пятнадцатое марта тысяча девятьсот девяностого года.
|
||||
В заявлении клиента указана дата рождения: 15-января-90.
|
||||
В заявлении на кредит указана дата выдачи паспорта: 15 янв 2010.
|
||||
В заявлении на перевыпуск указан номер карты: 4276380012345678.
|
||||
В заявлении указана дата рождения: 15 Mмм.
|
||||
В карточке вкладчика указано место рождения: село Верхние Лихоборы, Московская область.
|
||||
В карточке клиента указана дата рождения: 15 янв 90.
|
||||
В карточке клиента указана дата рождения: 15-Янв-1990.
|
||||
В кредитной заявке указано гражданство: российское.
|
||||
В кредитной заявке указано место рождения: г. Сочи, Краснодарский край.
|
||||
В личном кабинете пользователя указан телефон 79267778899.
|
||||
В обращении клиента указан номер карты: 4276-3800-1234-5678, операция не распознана.
|
||||
В обращении указано: «мой пин-код 1357, карта заблокирована».
|
||||
В справке банка указана дата рождения (день и месяц): 15/03.
|
||||
В справке банка указана дата рождения клиента: 15 января 90.
|
||||
В справке указана дата рождения (день и месяц): 15-янв.
|
||||
В тестовом контуре используется карта с сививи 777.
|
||||
В форме интернет-эквайринга клиент ввел cvv 456 для оплаты.
|
||||
В электронной анкете банка указана дата рождения: 15 03 1990.
|
||||
ГРАЖДАНСТВО: РОССИЙСКАЯ ФЕДЕРАЦИЯ. ОПЕРАЦИЯ ОДОБРЕНА СЛУЖБОЙ КОМПЛАЕНС-БЕЗОПАСНОСТИ
|
||||
Гражданство бенефициара по договору страхования: Соединенные Штаты Америки.
|
||||
Гражданство поручителя по договору: Российская Федерация/Армения.
|
||||
Дата выдачи паспорта бенефициара: 15 Января 10.
|
||||
Дата выдачи паспорта бенефициара: 15-Янв-10.
|
||||
Дата выдачи паспорта вкладчика: 10-03-15.
|
||||
Дата выдачи паспорта вкладчика: 15 03 10.
|
||||
Дата выдачи паспорта доверенного лица: 03-15-10.
|
||||
Дата выдачи паспорта доверенного лица: 15-Января-10.
|
||||
Дата выдачи паспорта заемщика: 03/15/10.
|
||||
Дата выдачи паспорта заемщика: 15-ЯНВАРЯ-10.
|
||||
Дата выдачи паспорта клиента: 03.15.10.
|
||||
Дата выдачи паспорта клиента: 15-янв-2010.
|
||||
Дата выдачи паспорта наследника по вкладу: 15 ЯНВАРЯ 10.
|
||||
Дата выдачи паспорта поручителя: 15 ЯНВ 10.
|
||||
Дата выдачи паспорта поручителя: 15-ЯНВ-10.
|
||||
Дата выдачи паспорта представителя клиента: 10.03.15.
|
||||
Дата рождения бенефициара по договору: 1990/03/15.
|
||||
Дата рождения бенефициара по счету: 15-Января-1990.
|
||||
Дата рождения держателя карты: 03.15.1990.
|
||||
Дата рождения заемщика по кредитному договору: 15 Января 1990.
|
||||
Дата рождения клиента (день и месяц): 15 ЯНВАРЯ.
|
||||
Дата рождения клиента (день и месяц): 15 Января.
|
||||
Дата рождения клиента (день и месяц): 15 января.
|
||||
Дата рождения клиента (день и месяц): 15-ЯНВАРЯ.
|
||||
Дата рождения клиента (день и месяц): 15-Января.
|
||||
Дата рождения клиента (день и месяц): 15-января.
|
||||
Дата рождения клиента в анкете: 15 ЯНВАРЯ 1990.
|
||||
Дата рождения клиента в досье: 15 ЯНВ 1990.
|
||||
Дата рождения клиента в кредитной заявке: 15-ЯНВАРЯ-1990.
|
||||
Дата рождения клиента-нерезидента: 03-15-1990.
|
||||
Дата рождения наследника по вкладу: 1990.03.15.
|
||||
Дата рождения подписанта договора: 1990-03-15.
|
||||
Держатель ввёл пин-код 7777 трижды неверно.
|
||||
Для завершения платежа в мобильном приложении введите CVV код 321.
|
||||
Для тестовой карты в анкете указан цвв 000.
|
||||
ЗАКЛАДАТЕЛЬ СЕЙФОВОЙ ЯЧЕЙКИ: ИВАНОВ
|
||||
ИВАН
|
||||
ИВАН И.
|
||||
ИВАНОВ
|
||||
ИВАНОВ И.
|
||||
ИВАНОВИВАНПЕТРОВИЧ
|
||||
ИНН: 7712 3456 7859, указан в заявлении.
|
||||
Иван
|
||||
Иван И.
|
||||
Иванов
|
||||
Иванов И.
|
||||
ИвановИванПетрович
|
||||
Иванова/Петрова
|
||||
Иванович-Петрович
|
||||
Иванович/Петрович
|
||||
Имя владельца счета указано как: Анна/Мария.
|
||||
Имя держателя карты не указано в заявлении.
|
||||
КЛИЕНТ ИВАН ЗАПРОСИЛ ПЕРЕВЫПУСК КАРТЫ
|
||||
КЛИЕНТ ИВАН И. ОФОРМИЛ ДЕБЕТОВУЮ КАРТУ
|
||||
Карта заблокирована по запросу через контактный центр.
|
||||
Клиент передал письмо с указанием ПИН 9087 и реквизитов карты.
|
||||
Клиент подтвердил онлайн-операцию, указав CVV 111.
|
||||
Клиент сообщил ПИН-код карты 2468 в телефонном разговоре.
|
||||
Клиент указал следующий орган выдачи: Паспортно-визовая служба УВД Московского района.
|
||||
Комментарий оператора: клиент назвал пин 8642 для подтверждения операции.
|
||||
МЕСТО РОЖДЕНИЯ: Г. ЕКАТЕРИНБУРГ. АНКЕТА ПРОВЕРЕНА СЛУЖБОЙ БЕЗОПАСНОСТИ БАНКА
|
||||
Место рождения бенефициара по договору страхования: г. Алма-Ата, Республика Казахстан.
|
||||
НОМЕР КАРТЫ: 5469400012345678. ОБРАЩЕНИЕ ЗАРЕГИСТРИРОВАНО В СИСТЕМЕ
|
||||
Новый ПИН-код: 5555, установлен 12.05.2024.
|
||||
Номер платежной карты клиента: 4276 3800 1234 5678, срок действия карты истек.
|
||||
Операция отклонена: проверьте правильность кода на обороте карты 789.
|
||||
Отправитель СБП: ИвановИванПетрович, сумма 5 000,00 руб.
|
||||
Отчество доверенного лица: Иванович-Петрович.
|
||||
Ошибка авторизации платежа: код 258 неверно введен CVV.
|
||||
ПЕТРОВИЧ
|
||||
ПЕТРОВИЧ И.
|
||||
ПИН первой карты: 1234, ПИН второй карты: 5678.
|
||||
ПИН-КОД: 7890
|
||||
ПИН-код - 1234
|
||||
ПИН-код «1234»
|
||||
ПИН: 5678
|
||||
ПЛАТЕЛЬЩИК: ИВАНОВ И. ОПЕРАЦИЯ ПРИНЯТА ОТДЕЛЕНИЕМ № 1
|
||||
ПОЛУЧАТЕЛЬ ПЕРЕВОДА: ИВАНОВИВАНПЕТРОВИЧ
|
||||
ПОРУЧИТЕЛЬ ПО ДОГОВОРУ: ПЕТРОВИЧ И.
|
||||
Паспорт заёмщика 4509 123456, паспорт поручителя 7710 654321.
|
||||
Паспортно-визовая служба УВД Московского района
|
||||
Петрович
|
||||
Петрович И.
|
||||
Пин Код: 1234
|
||||
Пин-код карты: 1234
|
||||
Получатель платежа: Иванов.
|
||||
Получатель платежа: Иванова/Петрова.
|
||||
Поручитель по кредиту: Петрович И.
|
||||
Последние 4 цифры номера карты: 1234.
|
||||
При оформлении виртуальной карты в поле CVV указан код 123.
|
||||
При оформлении ипотечного договора место рождения г. Казань подтверждено паспортом клиента.
|
||||
Система зафиксировала три неудачные попытки ввода CVV кода 999.
|
||||
Срок действия карты истекает в конце месяца.
|
||||
УФМС России по Московской области выдало паспорт гражданину.
|
||||
в графе «отчество созаемщика» указано: петрович
|
||||
в досье клиента прописано гражданство: российская федерация, статус налогового резидента присвоен
|
||||
в досье клиента прописано место рождения: г. самара, гражданство подтверждено документом
|
||||
доверенное лицо по вкладу: иванов и.
|
||||
доверенность оформлена на: иван петрович и., срок действия один год
|
||||
заявитель обращения: и. иван петрович, запрос справки по счету
|
||||
заявка на рефинансирование от: иван петрович
|
||||
и. иван петрович
|
||||
иван
|
||||
иван и.
|
||||
иван иванов
|
||||
иван иванов петрович
|
||||
иван петрович
|
||||
иван петрович и.
|
||||
иванов
|
||||
иванов и.
|
||||
иванов и. п.
|
||||
иванов петрович
|
||||
ивановиванпетрович
|
||||
клиент иван и. запросил выписку по депозиту
|
||||
отправитель перевода: иван иванов
|
||||
отправитель перевода: ивановиванпетрович
|
||||
петрович
|
||||
петрович и.
|
||||
пин 3456
|
||||
пин-код(1234)
|
||||
пин-код=1234
|
||||
плательщик перевода указан: иванов
|
||||
плательщик перевода: иван иванов петрович, счет 40817810000000000002
|
||||
подателем заявки на кредит указано: иван
|
||||
получатель наличных в кассе: иванов и. п.
|
||||
поручитель по договору: иванов петрович
|
||||
созаемщик по договору: петрович и.
|
||||
Reference in New Issue
Block a user