Начните с модели доступа, а не с ярлыка
Секретный gist часто воспринимают как «приватный». Это не так. Разница важна, потому что ссылка на gist может путешествовать: её вставляют в чат, встраивают в заметку, пересылают по электронной почте или она попадает в историю браузера. Если содержимое конфиденциально, вопрос не в том, появляется ли gist в результатах поиска, а в том, у кого есть ссылка.
Секретный GitHub gist не отображается в публичном поиске, но любой, у кого есть ссылка, может его просмотреть. Источник
Этот единственный факт меняет подход к аудиту. Вы ищете не только утечки секретов в публичных списках; вы ищете любой gist, ссылку на который вы распространяли или не можете отследить. Публичный и секретный gist различаются обнаруживаемостью, а не доступом по ссылке.
Шаг 1: Составьте опись своих gists
Откройте свою учётную запись GitHub и перечислите свои gists. Работайте из аккаунта, которому они принадлежат, а не из поисковой системы. Вам нужен полный набор, который вы контролируете, потому что поисковая система показывает только то, что проиндексировала.
Составьте рабочую опись с четырьмя столбцами:
| Столбец | Что записывать |
|---|---|
| Идентификатор gist | URL или короткий ID gist |
| Видимость | Публичный или секретный, как указано в вашем аккаунте |
| Класс содержимого | Пример кода, конфигурация, заметки, текст, связанный с учётными данными |
| Распространение ссылки | Где ссылка была вставлена, встроена или отправлена |
Не вставляйте настоящие секреты в эту опись. Записывайте классификацию, а не значение. Если gist содержит токен или пароль, отметьте его как связанный с учётными данными и считайте значение скомпрометированным, пока не смените его.
Шаг 2: Классифицируйте каждый gist по тому, кому нужен доступ
Таблица решений ниже превращает аудит в модель доступа. Она использует только те различия, которые поддерживает платформа: публичные gists, секретные gists и приватные репозитории.
| Потребность | Подходящая модель | Причина |
|---|---|---|
| Содержимое должно находиться и переиспользоваться | Публичный gist | Публичный по замыслу; обнаруживаемый |
| Содержимым можно делиться, но оно не должно попадать в поиск | Секретный gist | Не отображается в публичном поиске, но доступен по ссылке |
| Содержимому нужен приватный контроль доступа | Приватный репозиторий | Рекомендация GitHub для приватных материалов |
| Содержимое включает учётные данные или личные данные | Приватный репозиторий, затем смените данные | Ссылка на gist не является контролем доступа |
Стоит прямо назвать два ограничения. Публичный gist нельзя преобразовать в секретный, поэтому публичный gist, который не должен был быть публичным, нужно обрабатывать как решение об удалении и повторном создании, а не как переключатель.
Публичный gist нельзя преобразовать в секретный. Источник
И секретный gist не заменяет приватный репозиторий, когда материал действительно требует приватного доступа.
GitHub рекомендует приватный репозиторий для материалов, требующих приватного доступа. Источник
Шаг 3: Отследите, куда попала каждая ссылка на gist
Для каждого секретного gist задайте более узкий вопрос: у кого есть URL? Поищите URL gist в своих отправленных сообщениях, комментариях к issue, описаниях pull request, черновиках документации и общих заметках. Проверьте, не появляется ли ссылка на какой-либо публичной странице, которую вы ведёте.
Здесь помогает подход поиска по имени пользователя (username lookups). Ссылки на gists часто распространяются вместе с ником, поэтому проверка публичных ников, которые вы используете, может показать, где вы публиковали ссылки. Если со временем вы использовали несколько ников, начните с обзора известных публичных ников, затем проверьте каждый профиль на наличие URL gists. TraceSeek может проверить имя пользователя на 3,000+ платформах за 20–30 секунд, и первый скан бесплатный; он показывает, где ник появляется публично, а не то, что внутри gist или была ли ссылка передана приватно. Используйте его, чтобы найти публичные профили, которые могут содержать ссылки, а не как запись приватного распространения.
О структурированном способе восстановить список старых аккаунтов см. /guides/find-forgotten-online-accounts/. О странице поиска по конкретной платформе см. /find/github/.
Шаг 4: Решите, затем действуйте
Используйте классификацию, чтобы выбрать одно действие для каждого gist:
- Оставляйте публичным gist только если содержимое предназначено для публичного переиспользования.
- Оставляйте секретным gist только если доступ по ссылке приемлем для всех, кто может получить ссылку.
- Переносите материалы, связанные с учётными данными или личными данными, в приватный репозиторий, затем смените любое раскрытое значение.
- Для публичного gist, который не должен был быть публичным, удалите его и создайте содержимое заново в правильной модели; не предполагайте, что существует переключатель видимости.
Удаление gist удаляет вашу копию. Оно не удаляет копии, сделанные другими, кэши поисковых систем или ссылки, уже вставленные в другом месте. Планируйте это: сначала смените секреты, затем очистите gist.
Частые ошибки
- Воспринимать «секретный» как «приватный». Секретный gist не отображается в публичном поиске, но любой, у кого есть ссылка, может его просмотреть. В этом вся разница.
- Полагать, что публичный gist можно позже сделать секретным. Публичный gist нельзя преобразовать в секретный, поэтому решение нужно принять до публикации.
- Хранить токены в gist для удобства. Gist — это поверхность для обмена. Учётные данные должны находиться в приватном репозитории или менеджере секретов, а не на странице, доступной по ссылке.
- Проверять только то, что показывают поисковые системы. Поисковые индексы неполны и отстают. Проводите аудит из своего аккаунта, а не из поисковой строки.
- Удалять до смены. Если учётные данные были в gist, удаление gist не делает их недействительными. Сначала смените их.
- Путать совпадение имени пользователя с владением. Публичный профиль, упоминающий URL gist, — это зацепка, а не доказательство того, что человек контролирует gist или аккаунт.
Защита собственного следа
Долговременное решение — правило по умолчанию, а не разовая очистка. Заранее решите, какой класс содержимого идёт в какую модель: публичные gists для образцов, которые вы хотите, чтобы находили, секретные gists для материалов, которыми можно делиться, но которые не должны быть в списках, и приватные репозитории для всего, что требует приватного доступа. Если сомневаетесь, руководство GitHub указывает на приватный репозиторий.
GitHub рекомендует приватный репозиторий для материалов, требующих приватного доступа. Источник
Затем поддерживайте опись в актуальном состоянии. Краткий ежеквартальный обзор ваших gists, их видимости и того, где распространялись их ссылки, ловит отклонения до того, как они станут утечкой. Когда вы проверяете публичные ники, помните, что поиск по имени пользователя — это генератор зацепок, а не полная опись аккаунтов, и он не видит приватное распространение или содержимое gist.
Ключевые факты
Секретный GitHub gist не отображается в публичном поиске, но любой, у кого есть ссылка, может его просмотреть.
Публичный gist нельзя преобразовать в секретный.
GitHub рекомендует приватный репозиторий для материалов, требующих приватного доступа.
TraceSeek проверяет имя пользователя на 3,000+ платформах за 20–30 секунд, и первый скан бесплатный.