Безопасность
Функция проверки безопасности
Repomix использует Secretlint для обнаружения конфиденциальной информации в ваших файлах:
- API-ключи
- Токены доступа
- Учётные данные
- Приватные ключи
- Переменные окружения
Конфигурация
Проверки безопасности включены по умолчанию.
Отключение через CLI:
repomix --no-security-checkИли в repomix.config.json:
{
"security": {
"enableSecurityCheck": false
}
}Меры безопасности
- Обработка бинарных файлов: Содержимое бинарных файлов исключается из вывода, но их пути перечислены в структуре директорий для полного обзора репозитория
- Интеграция с Git: Учитывает паттерны
.gitignore - Автоматическое обнаружение: Сканирует на типичные проблемы безопасности:
- Учётные данные AWS
- Строки подключения к базе данных
- Токены аутентификации
- Приватные ключи
Доверие к конфигурации удалённого репозитория
Когда вы упаковываете удалённый репозиторий с помощью --remote, Repomix рассматривает конфигурацию этого репозитория как недоверенный код.
Почему конфигурационный файл — это код
repomix.config.* — это не просто данные:
repomix.config.ts/.js/.mjsвыполняется при загрузке.input.processorsзапускает внешние команды для подходящих файлов.output.instructionFilePathи include-паттерны с использованием../читают файлы за пределами репозитория.
Поэтому загрузка непроверенной конфигурации из незнакомого репозитория сравнима с запуском его Makefile или с npm install пакета с lifecycle-скриптами.
По умолчанию: удалённые конфигурации никогда не загружаются
Repomix игнорирует конфигурацию клонированного репозитория, если вы явно не запросили её использование. Ваша глобальная конфигурация и параметры CLI по-прежнему применяются. Если вы никогда не передаёте флаг ниже, ничто из этого раздела на вас не повлияет.
Включение доверия
# С помощью флага 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 сообщает об ошибке с пояснениями.
Рекомендации
- Не включайте
--remote-trust-config, если вам не нужна собственная конфигурация репозитория. - Прочитайте конфигурацию в запросе, прежде чем отвечать, особенно
input.processorsи любые пути с../. - Отдавайте предпочтение варианту «Да, только один раз» для репозиториев, которые вы не контролируете.
- В CI помните, что запрос не может вас защитить — фиксируйте ревизию, которую упаковываете, и проверяйте её заранее.
Когда проверка безопасности находит проблемы
Пример вывода:
🔍 Security Check:
──────────────────
2 suspicious file(s) detected and excluded:
1. config/credentials.json
- Found AWS access key
2. .env.local
- Found database passwordЛучшие практики
- Всегда проверяйте вывод перед публикацией
- Используйте
.repomixignoreдля конфиденциальных путей - Держите проверки безопасности включёнными
- Удаляйте конфиденциальные файлы из репозитория
Сообщение об уязвимостях безопасности
Нашли уязвимость безопасности? Пожалуйста:
- Не открывайте публичный issue
- Напишите на email: koukun0120@gmail.com
- Или используйте GitHub Security Advisories
Связанные ресурсы
- Обработка GitHub-репозиториев - Упаковка репозиториев, которые вы сами не клонировали
- Конфигурация - Настройка проверок безопасности через
security.enableSecurityCheck - Параметры командной строки - Использование флага
--no-security-check - Политика конфиденциальности - Узнать об обработке данных в Repomix