# Security Secrets

> Proteção de secrets - Nunca exponha credenciais em logs, terminal ou git

- Skill: `criptogus/security-secrets` (Agent Skill)
- Install (CLI): `npx skillmds@latest add criptogus/security-secrets`
- Raw SKILL.md: https://api.skillmd.com/api/skills/criptogus/security-secrets/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- Author: criptogus (https://skillmd.com/u/criptogus)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/criptogus/security-secrets

---


# Security Secrets - Proteção de Credenciais

Esta skill garante que secrets e credenciais NUNCA apareçam em sessões do Claude, terminais, logs ou commits git.

## Regra Fundamental

> **NUNCA exponha, exiba, logue ou commite secrets. JAMAIS.**

## O Que São Secrets?

| Tipo | Exemplos | Risco |
|------|----------|-------|
| **API Keys** | `GOOGLE_AI_API_KEY`, `STRIPE_SECRET_KEY` | Acesso não autorizado |
| **Database** | `DATABASE_URL`, connection strings | Data breach |
| **Auth Tokens** | JWT secrets, OAuth tokens | Impersonation |
| **Passwords** | Senhas de serviços, admin passwords | Comprometimento total |
| **Private Keys** | SSH keys, SSL certificates | Acesso a sistemas |
| **Webhooks** | URLs com tokens embutidos | Execução de ações |

## Regras de Proteção (NÃO NEGOCIÁVEIS)

### 1. NUNCA Exibir Valores

```bash
# ❌ PROIBIDO
echo $DATABASE_URL
cat .env
printenv | grep API

# ✅ CORRETO
echo "DATABASE_URL está configurado: $([ -n "$DATABASE_URL" ] && echo 'sim' || echo 'não')"
```

### 2. NUNCA Logar Secrets

```typescript
// ❌ PROIBIDO
console.log('API Key:', process.env.API_KEY);
console.log('Config:', JSON.stringify(config));

// ✅ CORRETO
console.log('API Key configurada:', !!process.env.API_KEY);
console.log('Config keys:', Object.keys(config));
```

### 3. NUNCA Commitar Secrets

```gitignore
# .gitignore OBRIGATÓRIO
.env
.env.*
*.pem
*.key
secrets/
credentials.json
```

### 4. NUNCA Incluir em Prompts

```markdown
❌ PROIBIDO: "Minha API key é sk-abc123..."
✅ CORRETO: "Preciso configurar a API key do Stripe"
```

## Arquivos Sensíveis - NUNCA LER/EXIBIR

| Arquivo | Motivo |
|---------|--------|
| `.env` | Variáveis de ambiente |
| `.env.local` | Overrides locais |
| `.env.production` | Secrets de produção |
| `credentials.json` | Google Cloud credentials |
| `*.pem`, `*.key` | Chaves privadas |
| `secrets.yaml` | Kubernetes secrets |
| `docker-compose.override.yml` | Pode conter secrets |

## Detecção de Vazamentos

### Padrões Suspeitos

```regex
# API Keys
(sk|pk)[-_][a-zA-Z0-9]{20,}
AKIA[0-9A-Z]{16}
ghp_[a-zA-Z0-9]{36}

# Connection Strings
(postgres|mysql|mongodb):\/\/[^:]+:[^@]+@

# Tokens
eyJ[a-zA-Z0-9-_]+\.eyJ[a-zA-Z0-9-_]+

# Generic Secrets
(password|secret|token|key)\s*[:=]\s*['\"][^'\"]+['\"]
```

### Se Detectar Vazamento

1. **PARE IMEDIATAMENTE**
2. **NÃO EXIBA** o valor encontrado
3. **ALERTE** o usuário: "Detectei um possível secret no arquivo X. Não vou exibi-lo."
4. **SUGIRA** rotação das credenciais

## Como Trabalhar com Secrets

### Verificar Existência (Sem Expor)

```typescript
// ✅ Verificar se existe
const hasApiKey = !!process.env.API_KEY;
const envVars = ['API_KEY', 'DB_URL', 'JWT_SECRET'];
const missing = envVars.filter(v => !process.env[v]);

if (missing.length > 0) {
  console.log('Variáveis faltando:', missing.join(', '));
}
```

### Mascarar em Logs

```typescript
// ✅ Mascarar valores
function maskSecret(value: string): string {
  if (!value || value.length < 8) return '***';
  return value.slice(0, 4) + '...' + value.slice(-4);
}

console.log('API Key:', maskSecret(process.env.API_KEY));
// Output: "API Key: sk-a...xyz9"
```

### Configurar Ambiente

```bash
# ✅ Copiar template (sem valores)
cp .env.example .env
echo "Edite .env e adicione suas credenciais"

# ✅ Verificar arquivo existe
[ -f .env ] && echo ".env configurado" || echo "Crie o arquivo .env"
```

## Checklist de Segurança

### Antes de Commitar

- [ ] `.env` está no `.gitignore`?
- [ ] Não há secrets hardcoded no código?
- [ ] Connection strings usam variáveis de ambiente?
- [ ] Logs não expõem credenciais?

### Antes de Compartilhar Código

- [ ] Removeu arquivos sensíveis?
- [ ] Substituiu secrets por placeholders?
- [ ] Verificou histórico do git?

### Em Code Review

- [ ] Nenhuma API key no diff?
- [ ] Nenhuma senha em strings?
- [ ] Nenhum token em URLs?

## Respostas Padrão

### Quando Pedirem para Exibir Secret

> "Não posso exibir o valor de secrets por segurança. Posso verificar se a variável está configurada ou ajudar a configurá-la de forma segura."

### Quando Encontrar Secret em Código

> "Detectei uma possível credencial hardcoded em [arquivo:linha]. Recomendo:
> 1. Mover para variável de ambiente
> 2. Adicionar arquivo ao .gitignore
> 3. Rotacionar a credencial se já foi commitada"

### Quando Secret Vazar

> "⚠️ ALERTA: Este secret pode ter sido exposto. Ações imediatas:
> 1. Rotacione a credencial AGORA
> 2. Verifique logs de acesso
> 3. Revise histórico do git
> 4. Considere usar git-filter-repo para limpar histórico"

## Ferramentas Recomendadas

| Ferramenta | Uso |
|------------|-----|
| `git-secrets` | Previne commits com secrets |
| `truffleHog` | Escaneia histórico git |
| `detect-secrets` | Pre-commit hook |
| `dotenv-vault` | Criptografia de .env |

---

**Esta skill ativa AUTOMATICAMENTE quando:**
- Código menciona variáveis de ambiente
- Arquivos .env são referenciados
- Discussão sobre API keys ou credenciais
- Configuração de serviços externos

