- name
- security-secrets
- description
- Proteção de secrets - Nunca exponha credenciais em logs, terminal ou git
- version
- 1.0.0
- category
- security
- triggers
- ["secret","secrets","env","environment",".env","api key","credential","password","token","auth","segurança","security"]
- tools
- []
- author
- liquid-ai
- based_on
- varlock-claude-skill
# 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
عرض على GitHub