Редактор секретов
Редактор секретов сканирует текст, которым вы собираетесь поделиться, — фрагмент лога, тикет поддержки, сообщение в чате, дамп конфигурации — и удаляет спрятанные внутри учётные данные до того, как кто-то ещё их прочитает. Вставьте текст или перетащите сюда файл, и он найдёт ключи 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 проверяет файлы конфигурации до того, как вы их закоммитите.
Библиотека обнаружения простыми словами
| Ключ доступа AWS | AKIA или ASIA, за которыми следуют ровно 16 заглавных букв или цифр, — форма идентификаторов ключей доступа AWS, долгосрочных и временных. |
| Токен GitHub | Префиксы ghp_, gho_, ghu_, ghs_ и ghr_ как минимум с 36 дополнительными символами, плюс детализированная форма github_pat_. |
| Ключ Stripe | sk_ или rk_, за которыми следуют live_ или test_ и не менее 16 буквенно-цифровых символов, — секретные и ограниченные ключи, тестовый режим включён, потому что тестовые ключи раскрывают структуру и привычки аккаунта. |
| Ключи OpenAI и Anthropic | Проектные ключи sk-proj- и общие ключи sk- длиной от 32 символов считаются OpenAI; ключи sk-ant- сообщаются как Anthropic — отдельный тип с собственным путём ротации. |
| Ключ API Google и токен Slack | AIza, за которым следуют 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, никогда не отмечаются, поэтому пометка образцов таким образом держит шум низким.
Делает ли редактирование секрет безопасным, если оригинал уже утёк?
Нет. Редактирование защищает копии, которые вы делаете с этого момента; оно не может отозвать тикет, сообщение в чате или лог, уже ушедший с секретом внутри. Обращайтесь с любыми учётными данными, появившимися без редактирования в общей системе, как с публичными: ротируйте их у поставщика, отзовите старые и только тогда делитесь отредактированным текстом. Сопутствующая статья, редактируйте секреты до вставки, объясняет порядок «сначала ротация» и почему удаления сообщения недостаточно.