Как не опубликовать секреты с примером конфигурации
Образец создают отдельно от рабочего файла и проверяют по разрешённому составу.
Не начинать с рабочей копии
Самый надёжный небольшой пример создаётся с нуля из перечня необходимых полей. Копирование действующей конфигурации с последующей заменой пароля оставляет риск забыть вторую строку подключения, адрес закрытого сервиса или идентификатор клиента. Публичному образцу обычно не нужны эти сведения. Ему нужны имена полей, допустимые типы и очевидно ложные значения, показывающие структуру.
Используйте короткие обозначения вроде NOT_A_REAL_CREDENTIAL вместо случайной длинной строки. Читатель должен сразу понимать, что её нельзя применять в рабочем окружении. Само расширение sample не делает содержимое безопасным. Образец с настоящим токеном остаётся утечкой даже в каталоге документации, архиве примеров или старом коммите, который больше не связан с текущей страницей.
Разрешённый состав
Для публикации полезен явный список файлов, которые должны войти в выпуск. Список исключений вроде «не брать .env» легко обходит забытый config.old или архив прошлого запуска. Разрешённый набор проще проверить: каждый новый артефакт требует осознанного добавления и назначения. Сканирование остаётся дополнительным барьером, а не единственным основанием публикации.
Проверьте символьные ссылки и реальные цели включаемых файлов. Имя внутри разрешённого каталога может указывать на закрытые данные за его пределами. Не добавляйте дерево целиком, если задача требует двух коротких образцов. После создания архива просмотрите фактический список записей и извлеките их в отдельный безопасный каталог для проверки. Проверка исходного каталога не гарантирует правильность уже созданного архива.
Что считать чувствительным
Помимо паролей и токенов, нежелательны внутренние домены, абсолютные пути, адреса машин, реальные контакты и данные из журналов ошибок. Строка подключения иногда содержит несколько реквизитов сразу. Сообщение исключения может цитировать значение конфигурации. Поэтому не следует публиковать полный вывод диагностики только потому, что пример программы завершился ошибкой.
Сканеры шаблонов узнают характерные ключи, но не обнаруживают все возможные секреты. Короткий пароль может выглядеть как обычное слово, а случайный идентификатор — дать ложное срабатывание. Нужно совместить автоматическую проверку, ограниченный состав и просмотр человеком, знакомым с назначением полей. При сомнении замените значение понятным фиктивным обозначением и объясните допустимую форму отдельно от реальных реквизитов.
Отдельные права и процессы
Будущий процесс с API должен получать ключ только через окружение выделенной службы и только когда это необходимо. Статический генератор не должен наследовать лишние полномочия. Он читает принятый JSON, шаблон и локальные ресурсы; ему не нужен доступ к частному API для вычисления хеша таблицы или создания HTML. Разделение процессов помогает уменьшить последствия ошибки.
Черновик модели не должен выбирать, какой файл читать или куда записывать ответ. Назначение определяется программой из фиксированного типа материала. Запрещены изменение шаблона, запуск shell и автоматическая публикация произвольного HTML. Даже корректный JSON может содержать реальные секреты, если они попали в запрос, поэтому техническая проверка содержания обязательна до добавления в публичный набор.
Если ошибка уже произошла
Удаление строки из текущей страницы не отзывает опубликованный ключ. Он мог сохраниться в кеше, архиве выпуска и истории репозитория. Сначала прекратите действие раскрытого реквизита через систему, которая его выдала, затем установите область доступа и проверьте журналы использования. Конкретные действия зависят от сервиса; универсальная команда очистки каталога не решает эту задачу.
Для нового выпуска исправьте образец, пересоберите артефакты и проверьте старые публичные копии в пределах доступного управления. Сохранённые резервные выпуски тоже требуют учёта, если в них попали чувствительные данные. В обычном процессе их нельзя бездумно удалять, но политика хранения должна предусматривать такой инцидент. Лучший профилактический шаг — не переносить рабочие значения в пример вообще и проверять итоговые байты, которые действительно будут обслуживаться сервером.