
A configuração de .env que impede o Claude Code de vazar seus segredos (Configuração completa inclusa)
AI features
- Views
- 1.7M
- Likes
- 1.3K
- Reposts
- 149
- Comments
- 30
- Bookmarks
- 5.9K
TL;DR
Aprenda a proteger o Claude Code configurando regras de negação no settings.json, usando ambientes de teste fictícios e implementando pre-commit hooks para evitar o vazamento de credenciais sensíveis.
Reading the PORTUGUÊS translation
Claude Code lê seus arquivos .env no momento em que abre seu projeto.
Suas chaves de API, senhas de banco de dados, tokens do Stripe — tudo que está no arquivo .env é carregado na memória e pode acabar nos logs de conversa enviados para os servidores da Anthropic.
A única coisa que realmente bloqueia o acesso é uma linha no settings.json, que a maioria das pessoas não tem e nem sabe que existe.
Aqui está a configuração de segurança completa 👇
Antes de mergulharmos, compartilho notas diárias sobre IA e vibe coding no meu canal do Telegram: **https://t.me/zodchixquant** 🧠

Por que as regras do CLAUDE.md não protegem você
A maioria das pessoas adiciona "nunca leia arquivos .env" ao CLAUDE.md e acha que está segura (não está).
CLAUDE.md é uma sugestão. Claude segue na maioria das vezes, mas sob pressão (tarefas complexas, contexto longo, instruções ambíguas) ele pode e ignora regras consultivas.
Uma issue no GitHub de abril de 2026 confirmou: Claude lê e ecoa o conteúdo do .env na conversa mesmo quando o CLAUDE.md proíbe explicitamente.
A única proteção confiável é uma regra de negação no settings.json. As regras de negação são aplicadas no nível do sistema antes mesmo de Claude ver o arquivo.
A diferença entre "por favor, não leia isso" e "você fisicamente não pode ler isso".

As 3 maneiras como seus segredos vazam
Não se trata apenas de Claude ler o .env diretamente. Existem três caminhos:
1. Leitura direta do arquivo. Claude escaneia seu projeto, abre o .env e o conteúdo se torna parte do contexto da conversa. Esse é o óbvio e o mais fácil de bloquear com regras de negação.
2. Captura de saída em tempo de execução. Claude executa seus testes ou inicia seu aplicativo. Uma requisição HTTP com falha registra o cabeçalho completo Authorization: Bearer sk-live-abc123.... Um timeout de banco de dados exibe a string de conexão com a senha. Claude captura toda a saída do comando. Seus segredos agora estão na conversa, mesmo que Claude nunca tenha aberto o .env.
3. Ferramentas de grep e busca. Claude usa grep para pesquisar em seu código por um nome de função. A busca encontra um arquivo de configuração contendo credenciais. A saída do grep inclui as linhas correspondentes com seus segredos visíveis.
A maioria das pessoas só se protege contra o caminho 1. Os caminhos 2 e 3 são onde o dano real acontece.
As regras de negação que realmente funcionam
Adicione estas ao ~/.claude/settings.json para proteção global em todos os projetos:
json
1{2 "permissions": {3 "deny": [4 "Read(**/.env*)",5 "Read(**/.dev.vars*)",6 "Read(**/*.pem)",7 "Read(**/*.key)",8 "Read(**/secrets/**)",9 "Read(**/credentials/**)",10 "Read(**/.aws/**)",11 "Read(**/.ssh/**)",12 "Read(**/config/database.yml)",13 "Read(**/config/credentials.json)",14 "Read(**/.npmrc)",15 "Read(**/.pypirc)",16 "Write(**/.env*)",17 "Write(**/secrets/**)",18 "Write(**/.ssh/**)"19 ]20 }21}
Isso bloqueia Claude de ler ou escrever qualquer arquivo .env, chaves PEM, chaves SSH, configurações AWS, arquivos de credenciais e tokens npm/PyPI. O curinga \\ significa que se aplica a todos os subdiretórios do seu projeto.
Bloqueando vazamentos em tempo de execução
Regras de negação impedem leituras diretas de arquivos, mas não a saída em tempo de execução. Para isso, use arquivos .env específicos para teste com valores fictícios:
1# .env.test — safe to read, safe to leak2STRIPE_SECRET_KEY=sk_test_not_a_real_key3DATABASE_URL=postgres://test:test@localhost:5432/testdb4OPENAI_API_KEY=sk-test-dummy-key-for-mocking5AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE6AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Aponte seu framework de teste para .env.test em vez de .env. Agora, quando Claude executar seus testes e capturar a saída, as únicas chaves visíveis serão fictícias.
O hook de pre-commit que pega tudo
Mesmo com regras de negação, erros acontecem. Adicione um hook de pre-commit do git que verifica segredos antes que qualquer commit chegue ao seu repositório:
bash
1#!/bin/bash2# .git/hooks/pre-commit — blocks commits containing secrets34PATTERNS=(5 'sk-ant-' # Anthropic API keys6 'sk-live-' # Stripe live keys7 'sk_live_' # Stripe live keys (alt format)8 'ghp_' # GitHub personal tokens9 'gho_' # GitHub OAuth tokens10 'AKIA' # AWS access keys11 'xox[bpors]-' # Slack tokens12 'SG\.' # SendGrid keys13 'eyJ' # JWTs14 'BEGIN.*PRIVATE KEY' # Private key material15)1617BLOCKED_FILES=('.env' 'credentials.json' 'id_rsa' '*.pem' '*.key')1819for pattern in "${PATTERNS[@]}"; do20 if git diff --cached --diff-filter=ACM | grep -qE "$pattern"; then21 echo "BLOCKED: Found potential secret matching '$pattern'"22 echo "Remove the secret and try again."23 exit 124 fi25done2627for file in "${BLOCKED_FILES[@]}"; do28 if git diff --cached --name-only | grep -q "$file"; then29 echo "BLOCKED: Attempted to commit sensitive file: $file"30 exit 131 fi32done3334echo "Pre-commit security check passed."35exit 0
Torne-o executável: chmod +x .git/hooks/pre-commit
Isso captura chaves de API da Anthropic, chaves do Stripe, tokens do GitHub, chaves AWS, tokens do Slack, chaves SendGrid, JWTs e material de chave privada. Se algum deles aparecer em um arquivo preparado, o commit é bloqueado.
Isolamento em contêiner (a opção nuclear)
Para máxima segurança, execute o Claude Code dentro de um contêiner onde os arquivos .env literalmente não existem:
bash
1# Mount /dev/null over .env so Claude can't see it2docker run -v /dev/null:/app/.env:ro your-dev-container
Da perspectiva do Claude, .env é um arquivo vazio. Seus segredos nunca entram no sistema de arquivos do contêiner. Isso é exagero para a maioria dos projetos, mas essencial para trabalhos com clientes que usam credenciais de produção.
A configuração de segurança completa (pronta para copiar e colar)
~/.claude/settings.json completo com todas as proteções de segurança:
json
1{2 "permissions": {3 "allow": [4 "Read",5 "Glob",6 "Grep",7 "LS",8 "Edit",9 "MultiEdit",10 "Write(src/**)",11 "Write(tests/**)",12 "Bash(npm run *)",13 "Bash(npm test *)",14 "Bash(npx tsc *)",15 "Bash(git status)",16 "Bash(git diff *)",17 "Bash(git log *)",18 "Bash(git add *)",19 "Bash(git commit *)"20 ],21 "deny": [22 "Read(**/.env*)",23 "Read(**/.dev.vars*)",24 "Read(**/*.pem)",25 "Read(**/*.key)",26 "Read(**/secrets/**)",27 "Read(**/credentials/**)",28 "Read(**/.aws/**)",29 "Read(**/.ssh/**)",30 "Read(**/config/database.yml)",31 "Read(**/config/credentials.json)",32 "Read(**/.npmrc)",33 "Read(**/.pypirc)",34 "Write(**/.env*)",35 "Write(**/secrets/**)",36 "Write(**/.ssh/**)",37 "Write(.github/workflows/*)",38 "Bash(rm -rf *)",39 "Bash(sudo *)",40 "Bash(git push *)",41 "Bash(npm publish *)",42 "Bash(curl * | sh)",43 "Bash(wget *)",44 "Bash(chmod *)"45 ],46 "defaultMode": "acceptEdits"47 }48}
Este é o settings.json do meu artigo anterior mais todas as regras de segurança deste. Regras de permissão para o fluxo de trabalho diário, regras de negação para segredos e operações perigosas. Um arquivo, proteção completa.
A lista de verificação
Antes da sua próxima sessão com Claude Code:
- Você tem regras de negação para arquivos .env no settings.json?
- Seus testes usam .env.test com valores fictícios?
- Existe um hook de pre-commit verificando padrões de segredos?
- As credenciais de produção estão armazenadas em um cofre, não em arquivos de texto simples?
- O .env está no seu .gitignore?
- Os arquivos .env estão fora do diretório do seu projeto para segurança extra?
Se você marcou todos os 6, seus segredos estão tão protegidos quanto possível. Se marcou 0, você está a um prompt ambíguo do Claude de ter suas chaves de API aparecendo em um log de conversa nos servidores da Anthropic.
Compartilho notas diárias sobre IA, finanças e vibe coding no meu canal do Telegram: **https://t.me/zodchixquant**
Obrigado por ler 🙏🏼



