Маскирование настраивают после инцидента: человек ищет в архиве старую задачу, находит вместо неё собственный токен доступа целиком и понимает, что распознавание экрана несколько месяцев складывало в базу всё подряд.
Настраивать надо до, и причина арифметическая. Секрет, не попавший в базу, не существует нигде. Секрет, попавший в базу, живёт минимум в четырёх местах: в таблице распознанного текста, в полнотекстовом индексе, в резервной копии и — самое неприятное — на исходном изображении, которого маскирование не касается вовсе.
#Что понадобится
- Работающий захват экрана с распознаванием. Маскирование применяется к тексту, который распознавание вытащило с картинки, и без него бессмысленно.
- Список своих чувствительных паттернов. Универсальные наборы закрывают типовое; ваши внутренние идентификаторы, номера тикетов и имена систем — нет.
- Инструмент предпросмотра. Правило, написанное с ошибкой, либо не срабатывает, либо вырезает половину текста. Проверять надо на образце, а не на боевом потоке.
Отдельная оговорка про роли: захват экрана, распознавание и настройка правил доступны владельцу экземпляра. Зарегистрированный участник на чужом экземпляре захвата не имеет вовсе, и настраивать ему нечего.
#Почему «вычистить потом» дороже
Один и тот же токен, попавший в архив, расходится по хранилищам. Смотреть в таблице надо на правую колонку: она показывает, что удаление в одном месте не является удалением.
| Место | Что там оказывается | Уходит при удалении записи |
|---|---|---|
| Таблица распознанного текста | Строка с секретом | Да |
| Полнотекстовый индекс | Зеркало той же строки для поиска | Только при явной синхронизации |
| Резервная копия | Всё вышеперечисленное на момент снимка | Нет, и не должно |
| Исходный скриншот | Секрет, видимый глазом на картинке | Нет: маскирование текста изображения не трогает |
Последняя строка — главный вывод статьи. Маскирование санирует текстовое представление, а не картинку. Пароль, попавший в кадр, остаётся на изображении в читаемом виде, даже если из распознанного текста он вычищен. Если это для вас неприемлемо, решение не в правилах маскирования, а в исключении окна из захвата — тогда снимок не делается вовсе.
И правило, которое действует независимо от всего перечисленного: секрет, попавший в архив, считается скомпрометированным. Отзывайте и меняйте его, а не только вычищайте записи.
#Шаг 1. Начните с готовых наборов
Пять семейств покрывают большую часть типовых утечек с экрана. Ставить их имеет смысл все сразу, а сужать — потом, по результатам.
| Набор | Что ловит |
|---|---|
| Банковское | Номера карт, IBAN и BIC, строки с остатком, коды проверки карты |
| Пароли | Строки вида «пароль: …», ПИН-коды, мастер-фразы, сид-фразы |
| Учётные данные | Ключи API распространённых форматов, токены, JWT, заголовки авторизации |
| Сетевое | Адреса IPv4 и IPv6, маски подсетей, MAC-адреса |
| Персональное | Адреса электронной почты, телефоны в международном и российском формате |
Каждое правило заменяет найденное на фиксированную маску ***. Правила применяются по очереди, в устойчивом порядке, поэтому результат воспроизводим: один и тот же входной текст всегда даёт один и тот же замаскированный.
#Шаг 2. Добавьте свои паттерны
Готовые наборы не знают про ваши внутренние системы. Типовые шаблоны, которые дописывают почти все:
(?i)\b(password|пароль|passwd|pwd)\s*[:=]\s*\S+
(?i)bearer\s+[A-Za-z0-9._\-]+
\b[A-Za-z0-9._%+\-]+@[A-Za-z0-9.\-]+\.[A-Za-z]{2,}\b
\b8\d{10}\b
\b(?:\d[ -]*?){13,19}\b
Первое ловит любое присвоение пароля, второе — заголовок авторизации, третье — почту, четвёртое — российский телефон без разделителей, пятое — номер карты с любыми пробелами и дефисами внутри.
Свои добавляйте по тому же принципу — якорь плюс значение, а не одно значение. Правило \b\d{6}\b вырежет из архива все шестизначные числа, включая суммы и номера домов. Правило (?i)\b(код|otp)\s*[:=]?\s*\d{4,8}\b вырежет только то, что подписано как код.
#Шаг 3. Проверьте на образце, а не на потоке
Возьмите реальный фрагмент распознанного текста — тот, где секрет заведомо есть, — и прогоните его через предпросмотр правил. Смотреть надо на две вещи сразу: исчез ли секрет и уцелел ли остальной текст.
Некорректное правило проявляется одним из двух способов. Либо не срабатывает — секрет остался, и обычно виноват якорь: в реальном тексте перед значением стоит не двоеточие, а перевод строки. Либо срабатывает слишком широко — вместе с секретом исчезло полстроки, и потом эта запись бесполезна для поиска.
Отдельно: правило с синтаксической ошибкой в регулярном выражении просто пропускается — оно не ломает распознавание, но и не работает. Молча. Поэтому проверка на образце обязательна: отсутствие ошибки на экране не означает, что правило применяется.
#Шаг 4. Закройте то, что маскированием не решается
Три вещи, для которых правила не подходят по устройству:
- Приложения, которые нельзя снимать вовсе — менеджер паролей, банк-клиент, рабочая система под соглашением о неразглашении. Их место в списке исключений захвата: тогда скриншот не делается, и вопрос об изображении не возникает. Чек-лист исключений — в гайде про настройку приватности при записи экрана и звука.
- Приложения, где текст бесполезен, а картинка нужна — их можно оставить в захвате, но исключить из распознавания. Скриншот будет, распознанного текста не будет.
- То, что уже попало в базу до настройки правил. Правила действуют на будущее. Со старым архивом придётся разбираться отдельно: найти поиском и удалить, а секреты — отозвать. Механика поштучного удаления — в разборе как удалить факт из памяти ИИ.
#Проверка результата
Через сутки после настройки проведите четыре проверки.
- Поиск по своим секретам. Возьмите фрагмент токена, номера карты, почты и поищите по архиву. Ничего не нашлось — правила работают. Нашлось — правило не сработало на реальных данных, хотя проходило на образце.
- Поиск по маске. Найдите записи, содержащие
***. Их наличие подтверждает, что правила применяются, а не просто ничего не находят. Полное отсутствие маски через сутки активной работы — повод перепроверить. - Проверка на переусердствование. Откройте несколько замаскированных записей и убедитесь, что текст вокруг маски остался читаемым и по нему всё ещё можно найти нужное. Особенности поиска по распознанному тексту разобраны отдельно в статье про поиск по OCR-тексту.
- Проверка изображения. Откройте скриншот, соответствующий замаскированной записи, и посмотрите, виден ли секрет на картинке. Скорее всего, виден — и это правильный момент, чтобы добавить приложение в исключения захвата.
#Что может пойти не так
Правило написано под идеальный текст. Распознавание ошибается: путает O и 0, l и 1, теряет пробелы. Правило, требующее точного совпадения, промахнётся. Делайте якорь мягче, а не строже.
Маскирование включили вместо исключения приложения. Для банк-клиента и менеджера паролей правильный ответ — не снимать вовсе. Маскирование здесь снижает риск наполовину: текст вычищен, изображение осталось.
Забыли про заголовки окон. Имя файла, адрес страницы и содержимое строки заголовка тоже попадают в базу, и там регулярно оказывается номер договора или фамилия клиента.
Понадеялись на набор по умолчанию. Пока правила не заданы, в память попадает всё, что попало в кадр. Это прямой проигрыш решениям, где фильтрация чувствительного включена из коробки, и лучше знать об этом до включения захвата.
Замаскировали, но не отозвали. Секрет, побывавший в архиве, скомпрометирован. Правило маскирования не отменяет ротацию ключа.
#Частые вопросы
#Маскирование удаляет секрет с самого скриншота?
Нет. Санируется текстовое представление — то, что попадает в таблицу и в поисковый индекс. Изображение остаётся нетронутым, и секрет на нём виден. Единственный способ не иметь его на картинке — не делать снимок: исключить приложение или окно из захвата.
#Что будет со старыми записями после настройки правил?
Ничего: правила применяются в момент записи, задним числом архив не пересобирается. Со старым разбирайтесь отдельно — поиском и удалением, а секреты меняйте независимо от того, удалили вы записи или нет.
#Сильно ли маскирование ломает поиск?
Зависит от ширины правил. Узкие правила с якорями почти не мешают: из строки исчезает значение, а контекст остаётся, и запись всё ещё находится по соседним словам. Широкие правила вроде «все длинные числа» выедают текст и делают архив хуже.
#Помогает ли маскирование, когда я отправляю запрос облачной модели?
Косвенно: если секрет не попал в базу, он не может быть подмешан в контекст запроса. Но обезличивание того, что вы набираете руками, — отдельная задача со своей процедурой, описанной в гайде про персональные данные в промпте.
#Что вообще имеет смысл пускать в память ассистента?
Меньше, чем кажется на старте. Полезность памяти растёт от контекста работы, а не от полноты архива, и большая часть чувствительного не даёт ничего, кроме риска. Разбор границы — в статье про память и приватность, общая рамка — в материале про приватный ИИ и локальное хранение.
#Можно ли доверять маскированию для действительно критичных секретов?
Не стоит. Правила пишет человек, регулярные выражения промахиваются, распознавание искажает текст, а изображение остаётся в любом случае. Для критичного работает только исключение из захвата — то есть отсутствие записи, а не её обработка.
#Вывод
Порядок здесь один и он неудобный: сначала исключите из захвата то, что нельзя снимать вовсе, потом поставьте готовые наборы правил, потом допишите свои под внутренние системы, и только потом включайте захват на полную. Обратный порядок — включить, а разобраться потом — означает архив, который придётся чистить из четырёх мест, и секреты, которые всё равно придётся сменить.