Skip to content

Безопасность

Функция проверки безопасности

Repomix использует Secretlint для обнаружения конфиденциальной информации в ваших файлах:

  • API-ключи
  • Токены доступа
  • Учётные данные
  • Приватные ключи
  • Переменные окружения

Конфигурация

Проверки безопасности включены по умолчанию.

Отключение через CLI:

bash
repomix --no-security-check

Или в repomix.config.json:

json
{
  "security": {
    "enableSecurityCheck": false
  }
}

Меры безопасности

  1. Обработка бинарных файлов: Содержимое бинарных файлов исключается из вывода, но их пути перечислены в структуре директорий для полного обзора репозитория
  2. Интеграция с Git: Учитывает паттерны .gitignore
  3. Автоматическое обнаружение: Сканирует на типичные проблемы безопасности:
  • Учётные данные AWS
  • Строки подключения к базе данных
  • Токены аутентификации
  • Приватные ключи

Доверие к конфигурации удалённого репозитория

Когда вы упаковываете удалённый репозиторий с помощью --remote, Repomix рассматривает конфигурацию этого репозитория как недоверенный код.

Почему конфигурационный файл — это код

repomix.config.* — это не просто данные:

  • repomix.config.ts / .js / .mjs выполняется при загрузке.
  • input.processors запускает внешние команды для подходящих файлов.
  • output.instructionFilePath и include-паттерны с использованием ../ читают файлы за пределами репозитория.

Поэтому загрузка непроверенной конфигурации из незнакомого репозитория сравнима с запуском его Makefile или с npm install пакета с lifecycle-скриптами.

По умолчанию: удалённые конфигурации никогда не загружаются

Repomix игнорирует конфигурацию клонированного репозитория, если вы явно не запросили её использование. Ваша глобальная конфигурация и параметры CLI по-прежнему применяются. Если вы никогда не передаёте флаг ниже, ничто из этого раздела на вас не повлияет.

Включение доверия

bash
# С помощью флага CLI
repomix --remote user/repo --remote-trust-config

# С помощью переменной окружения
REPOMIX_REMOTE_TRUST_CONFIG=true repomix --remote user/repo

Это предоставляет удалённой конфигурации тот же уровень доверия, что и конфигурации, которую вы написали сами. Используйте это только для репозиториев, которым вы доверяете и которые проверили.

Запрос подтверждения

В интерактивном терминале Repomix показывает конфигурацию, которая будет выполнена, и запрашивает подтверждение перед её загрузкой:

ВариантДействие
Да, только один разДоверять только этому запуску.
Да, и больше не спрашивать для этого репозиторияЗапомнить решение (см. ниже).
Нет (выбор по умолчанию)Прервать без загрузки конфигурации.

Конфигурация, которую вам показывают, написана автором репозитория, поэтому Repomix гарантирует, что её отображение нельзя подделать:

  • Управляющие и ANSI-последовательности экранируются, поэтому конфигурация не может перерисовать терминал или прокрутить предупреждение за пределы видимости.
  • Двунаправленные и невидимые символы экранируются, поэтому текст, который вы читаете, — это тот текст, который выполняется (Trojan Source).
  • Вывод ограничен по количеству строк и размеру в байтах, поэтому искусственно раздутая конфигурация не может вытеснить предупреждение за пределы экрана.
  • Каждая строка конфигурации снабжается префиксом, поэтому конфигурация не может подделать собственные разделители или сообщения Repomix.
  • Симлинки отклоняются. Git сохраняет симлинки, поэтому репозиторий может содержать repomix.config.json, указывающий за пределы клона. Repomix требует, чтобы конфигурация была обычным файлом внутри клонированного дерева — иначе байты, которые вы проверили, не были бы теми байтами, которые выполняются.

Запоминание решения

Выбор «не спрашивать снова» сохраняет метку во временном каталоге ($TMPDIR/repomix/trusted-remotes/), доступную для чтения и записи только вашей учётной записи.

Метка привязана к содержимому: она хранит хэш одобренной вами конфигурации. Если позже репозиторий предоставит другую конфигурацию, хэш перестанет совпадать, и вопрос будет задан снова — та же модель, что и у direnv allow.

Область действия привязки

Хэш охватывает только основной файл конфигурации. Конфигурация .ts / .js может import-ировать другие файлы, а input.processors может вызывать внешние скрипты; ни то, ни другое не хэшируется. Репозиторий, которому вы уже доверяете, может изменить эти файлы, оставив основной файл неизменным. Именно поэтому исполняемые конфигурации отмечаются как таковые в запросе — воспринимайте «не спрашивать снова» как доверие репозиторию, а не только файлу, который вы прочитали.

Метки хранятся во временном каталоге, поэтому решения теряют силу, когда ОС его очищает. Это сделано намеренно: истечение в сторону «спросить снова» — безопасное направление.

Когда запрос пропускается

СитуацияПоведение
Передан --forceДоверяется без запроса. Флаг означает, что вы принимаете последствия; уведомление выводится в stderr.
Неинтерактивная оболочка (CI, конвейеры)Доверяется без запроса, сохраняя работу существующей автоматизации. Уведомление выводится в stderr.
Репозиторий уже доверенныйЗагружается без запроса, пока конфигурация не изменилась.
Используется абсолютный --configСобственная конфигурация клонированного репозитория никогда не загружается, поэтому подтверждать нечего.
В клоне нет файла конфигурацииНечему доверять.

При использовании --stdout или когда stdout перенаправлен, запрос не может быть показан. Вместо того чтобы молча довериться конфигурации, Repomix сообщает об ошибке с пояснениями.

Рекомендации

  1. Не включайте --remote-trust-config, если вам не нужна собственная конфигурация репозитория.
  2. Прочитайте конфигурацию в запросе, прежде чем отвечать, особенно input.processors и любые пути с ../.
  3. Отдавайте предпочтение варианту «Да, только один раз» для репозиториев, которые вы не контролируете.
  4. В CI помните, что запрос не может вас защитить — фиксируйте ревизию, которую упаковываете, и проверяйте её заранее.

Когда проверка безопасности находит проблемы

Пример вывода:

bash
🔍 Security Check:
──────────────────
2 suspicious file(s) detected and excluded:
1. config/credentials.json
  - Found AWS access key
2. .env.local
  - Found database password

Лучшие практики

  1. Всегда проверяйте вывод перед публикацией
  2. Используйте .repomixignore для конфиденциальных путей
  3. Держите проверки безопасности включёнными
  4. Удаляйте конфиденциальные файлы из репозитория

Сообщение об уязвимостях безопасности

Нашли уязвимость безопасности? Пожалуйста:

  1. Не открывайте публичный issue
  2. Напишите на email: koukun0120@gmail.com
  3. Или используйте GitHub Security Advisories

Связанные ресурсы

Released under the MIT License.