Редактор секретов

Редактор секретов сканирует текст, которым вы собираетесь поделиться, — фрагмент лога, тикет поддержки, сообщение в чате, дамп конфигурации — и удаляет спрятанные внутри учётные данные до того, как кто-то ещё их прочитает. Вставьте текст или перетащите сюда файл, и он найдёт ключи API поставщиков, токены доступа, блоки закрытых ключей, JSON Web Token, номера карт и адреса электронной почты, покажет каждое совпадение в замаскированном виде в таблице и соберёт чистую копию, где каждый секрет заменён на [REDACTED]. Всё работает на 100 % в вашем браузере: ничего не загружается, ничего не хранится, а анализ текста не делает сетевых запросов. Сопутствующее руководство, редактируйте секреты до вставки, объясняет, что сканеры могут и не могут обнаружить; для захватов браузера используйте анализатор HAR, а для файлов конфигурации — парсер .env.

Последнее обновление:

Или перетащите текстовый файл в любое место этого поля. Лимит: 2 МБ. Файл читается только на этом устройстве и никогда не загружается.

Что ищет сканер — и как он решает

Большинство секретов утекает не через атаки, а через желание помочь. Кто-то вставляет лог в тикет, файл конфигурации в чат, команду curl в сообщение на форуме — и учётные данные, случайно оказавшиеся внутри, путешествуют вместе с ним в системы, которые индексируют, пересылают и навсегда архивируют текст. Эта страница — пауза перед той самой вставкой. Введите или перетащите текст, и сканирование идёт во время ввода: полоса подсчётов суммирует находки по типам, предпросмотр подсвечивает каждое совпадение на месте с замаскированным значением, таблица находок перечисляет тип, замаскированную форму и номер строки, а отредактированная копия ниже заменяет каждое совпадение единственным маркером [REDACTED], готовая к копированию или скачиванию как файл .txt.

Первый слой обнаружения — это форма. Настоящие учётные данные настоящих поставщиков имеют узнаваемые формы, и сканер знает основные из них: ключи доступа AWS, токены GitHub в классической и детализированной форме, секретные и ограниченные ключи Stripe, проектные и общие ключи OpenAI, ключи Anthropic, ключи API Google и токены Slack. Блок закрытого ключа захватывается как одно целое совпадение — от строки BEGIN до строки END, — потому что редактирование только части блока ключа оставляет пригодный к использованию ключ. JSON Web Token распознаются по их жёсткой трёхсегментной структуре base64url, а номера карт должны пройти контрольную сумму Луна, прежде чем будут отмечены, чтобы обычные номера заказов и временные метки оставались тихими.

Энтропия, заполнители и честные пределы

Второй слой покрывает секреты без формы поставщика: присваивания вида password = …, api_key: … или client_secret = …. Голое ключевое слово ничего не доказывает, поэтому значение должно пройти ещё двое ворот — не менее двенадцати символов и энтропию Шеннона не менее 3,2 бита на символ, которую случайные ключи проходят легко, а обычные слова — нет. Значения-заполнители исключены по замыслу: всё, что содержит example, test, dummy, xxx, your-, placeholder или changeme, — это документация, а не учётные данные, и отмечать это значило бы приучить вас игнорировать сканер. Где формы перекрываются, побеждает конкретный шаблон: ключ Stripe, присвоенный переменной, сообщается один раз, как ключ Stripe.

Два типа находок защищают людей, а не системы. Адреса электронной почты отмечаются как персональные данные, потому что тикет, полный адресов клиентов, — это инцидент конфиденциальности, даже если пароль не появляется. Номера карт отмечаются, только когда цифры проходят проверку Луна — контрольную сумму, встроенную в каждый подлинный номер карты; тот же тест позволяет сканеру игнорировать номера счетов, коды отслеживания и метки Unix, которые просто выглядят длинными и числовыми. На экране каждое значение маскируется максимум до первых четырёх символов, так что взгляд через плечо или скриншот узнают тип и место секрета, но никогда не сам секрет; короткие значения не показывают ничего. Полное значение существует только в вашем исходном тексте, который никогда не покидает страницу.

Используйте редактор как один шаг в более безопасной привычке делиться, а не как гарантию. Редактируйте локально, делитесь отредактированной копией, а настоящий секрет — когда секрет действительно должен сменить владельца — отправляйте через менеджер секретов или истекающую ссылку для обмена, никогда не через тот же тикет или чат, что и отредактированный текст. Если настоящие учётные данные уже были вставлены без редактирования куда-либо, удаления сообщения недостаточно: копии, индексы и уведомления уже могут существовать, поэтому ротируйте учётные данные и обращайтесь со старыми как с публичными. Сопутствующая статья, редактируйте секреты до вставки, полностью проходит этот процесс; анализатор HAR делает ту же работу для захватов браузера, а парсер .env проверяет файлы конфигурации до того, как вы их закоммитите.

Библиотека обнаружения простыми словами

Ключ доступа AWSAKIA или ASIA, за которыми следуют ровно 16 заглавных букв или цифр, — форма идентификаторов ключей доступа AWS, долгосрочных и временных.
Токен GitHubПрефиксы ghp_, gho_, ghu_, ghs_ и ghr_ как минимум с 36 дополнительными символами, плюс детализированная форма github_pat_.
Ключ Stripesk_ или rk_, за которыми следуют live_ или test_ и не менее 16 буквенно-цифровых символов, — секретные и ограниченные ключи, тестовый режим включён, потому что тестовые ключи раскрывают структуру и привычки аккаунта.
Ключи OpenAI и AnthropicПроектные ключи sk-proj- и общие ключи sk- длиной от 32 символов считаются OpenAI; ключи sk-ant- сообщаются как Anthropic — отдельный тип с собственным путём ротации.
Ключ API Google и токен SlackAIza, за которым следуют 35 символов, для Google; префиксы xoxb, xoxa, xoxp, xoxr и xoxs для токенов Slack ботов, приложений, пользователей, обновления и сессий.
Блок закрытого ключаЦелый блок PEM, от -----BEGIN PRIVATE KEY----- (варианты RSA, EC, OpenSSH и PGP включены) до соответствующей строки END, сообщается и редактируется как одно совпадение.
JSON Web TokenТри сегмента base64url, разделённых точками, первые два из которых начинаются с eyJ, — закодированная форма заголовка и полезной нагрузки JSON, с которой начинается каждый JWT.
Общее присваиваниеЗначения, присвоенные именам вроде api_key, secret, token, password, passwd, auth_token, access_token или client_secret, отмечаются, только когда значение не короче 12 символов и его энтропия Шеннона достигает 3,2; документированные заполнители никогда не отмечаются.
Адрес электронной почтыОбычные адреса электронной почты, сообщаемые как персональные данные (PII), чтобы массовые вставки адресов клиентов или сотрудников ловились до того, как распространятся.
Номер картыПоследовательности из 13–19 цифр, пробелы и тире разрешены, отмечаются, только когда проходят контрольную сумму Луна, которую удовлетворяет каждый подлинный номер карты.
Маскировка и маркерНа экране значение показывает максимум первые четыре символа плюс многоточие и ничего для значений из четырёх символов и короче. В отредактированной копии каждое совпадение становится единственным маркером [REDACTED]; тип остаётся видимым в таблице находок, никогда — внутри текста.

Частые вопросы

Загружается или хранится ли мой текст где-нибудь?

Нет. Сканирование работает на этой странице, на вашем устройстве: ничего не загружается, не передаётся и не хранится, а сканирование не делает сетевых запросов. Это сознательное правило проектирования — инструмент, который просил бы вас загрузить текст, полный секретов, чтобы удалить секреты, сам был бы частью проблемы.

Какие виды секретов он может найти?

Учётные данные в форме поставщиков — ключи доступа AWS и ключи и токены GitHub, Stripe, OpenAI, Anthropic, Google и Slack — плюс целые блоки закрытых ключей, JSON Web Token, значения с высокой энтропией, присвоенные именам вроде password или api_key, адреса электронной почты и номера карт, проходящие контрольную сумму Луна. Таблица фактов выше перечисляет каждый шаблон простыми словами.

Почему он пропустил секрет, который я вижу в своём тексте?

По трём честным причинам. Значение может быть разбито между строками или перенесено, так что ни одна форма не совпадает. Это может быть человеческий пароль с низкой энтропией, присвоенный имени, которого общее правило не знает. Или это может быть формат, который ещё не покрывает ни один шаблон, — строка подключения к базе данных, значение cookie, URL с базовой аутентификацией. Сканер детерминированно ловит распространённые, хорошо документированные формы; это страховочная сеть, а не доказательство того, что текст чист, поэтому сами просмотрите предпросмотр перед тем, как делиться.

Почему он отметил то, что не является настоящим секретом?

Обычно потому, что значение честно имеет такую форму: случайно выглядящее тестовое значение без слов-заполнителей, пример токена из внутренней документации или JWT, использованный как пример для фронтенда. Проверьте таблицу находок перед тем, как делиться, — ложное срабатывание стоит взгляда, а пропущенное совпадение стоит ротации. Значения, содержащие example, test, dummy, xxx, your-, placeholder или changeme, никогда не отмечаются, поэтому пометка образцов таким образом держит шум низким.

Делает ли редактирование секрет безопасным, если оригинал уже утёк?

Нет. Редактирование защищает копии, которые вы делаете с этого момента; оно не может отозвать тикет, сообщение в чате или лог, уже ушедший с секретом внутри. Обращайтесь с любыми учётными данными, появившимися без редактирования в общей системе, как с публичными: ротируйте их у поставщика, отзовите старые и только тогда делитесь отредактированным текстом. Сопутствующая статья, редактируйте секреты до вставки, объясняет порядок «сначала ротация» и почему удаления сообщения недостаточно.