Skip to content

Segurança

Recurso de Verificação de Segurança

O Repomix usa o Secretlint para detectar informações confidenciais em seus arquivos:

  • Chaves de API
  • Tokens de acesso
  • Credenciais
  • Chaves privadas
  • Variáveis de ambiente

Configuração

As verificações de segurança são habilitadas por padrão.

Desativar via CLI:

bash
repomix --no-security-check

Ou em repomix.config.json:

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

Medidas de Segurança

  1. Tratamento de Arquivos Binários: Os conteúdos de arquivos binários são excluídos da saída, mas seus caminhos são listados na estrutura de diretórios para uma visão completa do repositório
  2. Compatível com Git: Respeita os padrões do .gitignore
  3. Detecção Automatizada: Verifica problemas de segurança comuns:
    • Credenciais da AWS
    • Strings de conexão de banco de dados
    • Tokens de autenticação
    • Chaves privadas

Confiança na Configuração de Repositórios Remotos

Ao compactar um repositório remoto com --remote, o Repomix trata a configuração desse repositório como código não confiável.

Por Que um Arquivo de Configuração é Código

Um repomix.config.* não é apenas dados:

  • repomix.config.ts / .js / .mjs é executado quando é carregado.
  • input.processors executa comandos externos nos arquivos correspondentes.
  • output.instructionFilePath e padrões de inclusão que usam ../ leem arquivos fora do repositório.

Por isso, carregar uma configuração não revisada de um repositório desconhecido é comparável a executar seu Makefile, ou a rodar npm install em um pacote com scripts de ciclo de vida.

Padrão: Configurações Remotas Nunca São Carregadas

O Repomix ignora a configuração de um repositório clonado, a menos que você peça explicitamente. Sua configuração global e as opções de CLI continuam sendo aplicadas. Se você nunca passar a flag abaixo, nada nesta seção pode afetar você.

Como Ativar

bash
# Usando flag da CLI
repomix --remote user/repo --remote-trust-config

# Usando variável de ambiente
REPOMIX_REMOTE_TRUST_CONFIG=true repomix --remote user/repo

Isso concede à configuração remota a mesma confiança de uma configuração escrita por você. Use apenas para repositórios em que você confia e que já revisou.

Prompt de Confirmação

Em um terminal interativo, o Repomix mostra a configuração que está prestes a ser executada e pede confirmação antes de carregá-la:

EscolhaEfeito
Sim, só desta vezConfia apenas nesta execução.
Sim, e não perguntar novamente para este repositórioLembra a decisão (veja abaixo).
Não (seleção padrão)Aborta sem carregar a configuração.

A configuração mostrada a você é escrita pelo autor do repositório, então o Repomix garante que a exibição não possa ser manipulada:

  • Sequências de controle e ANSI são escapadas, para que uma configuração não consiga repintar o terminal nem rolar o aviso para fora da tela.
  • Caracteres bidirecionais e invisíveis são escapados, para que o texto que você lê seja o texto que é executado (Trojan Source).
  • A saída tem um limite tanto no número de linhas quanto no tamanho em bytes, para que uma configuração preenchida artificialmente não consiga empurrar o aviso para fora da tela.
  • Cada linha da configuração recebe um prefixo, para que uma configuração não consiga forjar os próprios separadores ou mensagens do Repomix.
  • Links simbólicos são recusados. O Git preserva links simbólicos, então um repositório pode incluir um repomix.config.json que aponte para fora do clone. O Repomix exige que a configuração seja um arquivo comum dentro da árvore clonada; caso contrário, os bytes que você revisou não seriam os bytes que são executados.

Lembrando uma Decisão

Escolher "não perguntar novamente" grava um marcador no seu diretório temporário ($TMPDIR/repomix/trusted-remotes/), legível e gravável apenas pela sua conta de usuário.

O marcador é fixado ao conteúdo: ele registra um hash da configuração que você aprovou. Se esse repositório publicar depois uma configuração diferente, o hash deixa de corresponder e você é perguntado novamente — o mesmo modelo do direnv allow.

Escopo da fixação

O hash cobre apenas o arquivo de configuração de entrada. Uma configuração .ts / .js pode fazer import de outros arquivos, e input.processors pode invocar scripts externos; nenhum dos dois é incluído no hash. Um repositório que você já confiou pode alterar esses arquivos enquanto o arquivo de entrada permanece idêntico. É por isso que configurações executáveis são identificadas como tais no prompt: trate "não perguntar novamente" como confiança no repositório, não apenas no arquivo que você leu.

Os marcadores ficam no diretório temporário, então as decisões expiram quando o seu sistema operacional o limpa. Isso é intencional: expirar em direção a "perguntar novamente" é a direção segura.

Quando o Prompt é Ignorado

SituaçãoComportamento
--force é passadoConfiado sem perguntar. A flag significa que você aceita as consequências; um aviso é impresso no stderr.
Shell não interativo (CI, pipes)Confiado sem perguntar, preservando a automação existente. Um aviso é impresso no stderr.
Repositório já confiadoCarregado sem perguntar, desde que a configuração não tenha mudado.
Um --config absoluto é usadoA configuração própria do repositório clonado nunca é carregada, então não há nada a confirmar.
O clone não tem arquivo de configuraçãoNão há nada a confiar.

Com --stdout, ou quando a saída padrão é redirecionada, o prompt não pode ser exibido. O Repomix reporta um erro com orientações em vez de confiar silenciosamente na configuração.

Recomendações

  1. Deixe --remote-trust-config desativado, a menos que você precise da configuração própria do repositório.
  2. Leia a configuração no prompt antes de responder, especialmente input.processors e quaisquer caminhos ../.
  3. Prefira "Sim, só desta vez" para repositórios que você não controla.
  4. Em CI, lembre-se de que o prompt não pode proteger você — fixe a revisão que você compacta e a revise previamente.

Quando a Verificação de Segurança Encontra Problemas

Exemplo de saída:

bash
🔍 Verificação de Segurança:
──────────────────
2 arquivo(s) suspeito(s) detectados e excluídos:
1. config/credentials.json
  - Chave de acesso da AWS encontrada
2. .env.local
  - Senha do banco de dados encontrada

Melhores Práticas

  1. Sempre revise a saída antes de compartilhar
  2. Use .repomixignore para caminhos confidenciais
  3. Mantenha as verificações de segurança habilitadas
  4. Remova arquivos confidenciais do repositório

Reportando Problemas de Segurança

Encontrou uma vulnerabilidade de segurança? Por favor:

  1. Não abra uma issue pública
  2. Envie um e-mail para: koukun0120@gmail.com
  3. Ou use Avisos de Segurança do GitHub

Recursos relacionados

Released under the MIT License.