Boas práticas de segurança para ambientes de desenvolvimento local
1. Isolamento de ambiente e dependências
O isolamento é a primeira linha de defesa contra contaminação cruzada entre projetos e o sistema operacional host. Containers Docker ou Podman oferecem ambientes efêmeros que eliminam resíduos após o uso. Para gerenciar versões de linguagens, ferramentas como asdf, nvm e pyenv evitam conflitos globais:
# Exemplo: Instalação isolada de Node.js com nvm
nvm install 18.17.0
nvm use 18.17.0
node --version
# v18.17.0
# Exemplo: Ambiente virtual Python com venv
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Ambientes virtuais garantem que bibliotecas específicas do projeto não interfiram em outros projetos ou no sistema base. Combine com Docker para serviços de infraestrutura (bancos de dados, filas):
# docker-compose.yml para serviços isolados
version: '3.8'
services:
postgres:
image: postgres:15
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
2. Gestão segura de credenciais e segredos
Nunca armazene credenciais em código-fonte. Utilize vaults locais como Hashicorp Vault (modo dev), Bitwarden CLI ou 1Password CLI para gerenciar segredos. Ferramentas de injeção como direnv e sops automatizam o carregamento seguro:
# .envrc com direnv (carrega automaticamente ao entrar no diretório)
export DB_PASSWORD="supersecreto"
export API_KEY="sk-abc123"
# Criptografar .env com sops
sops --encrypt .env > .env.encrypted
sops --decrypt .env.encrypted > .env
Boas práticas para arquivos .env:
- Adicione .env ao .gitignore imediatamente
- Restrinja permissões: chmod 600 .env
- Rotacione chaves periodicamente (a cada 90 dias)
- Use .env.example como template com valores fictícios
# .gitignore
.env
.env.*
!env.example
3. Configuração segura de ferramentas de desenvolvimento
Git: assinatura de commits e hooks
Assine commits com GPG ou SSH para garantir autoria e integridade:
# Configurar assinatura GPG
git config --global user.signingkey ABCDEF1234567890
git config --global commit.gpgSign true
# Ou com SSH (Git 2.34+)
git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/id_ed25519.pub
git commit -S -m "feat: implementa autenticação"
Configure hooks com pre-commit e gitleaks para evitar vazamento de segredos:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
- id: detect-private-key
- id: check-added-large-files
- repo: https://github.com/gitleaks/gitleaks
rev: v8.18.2
hooks:
- id: gitleaks
Editores e IDEs
Desabilite execução automática de código em editores (VS Code, Neovim). Instale apenas extensões de fontes confiáveis e verifique permissões:
# VS Code: settings.json para segurança
{
"security.workspace.trust.enabled": true,
"files.autoSave": "off",
"extensions.ignoreRecommendations": true
}
Gerenciamento de pacotes
Sempre utilize lockfiles e verifique checksums:
# npm
npm install --package-lock-only
npm audit
# pip
pip freeze > requirements.txt
pip install --require-hashes -r requirements.txt
# Verificar checksum manualmente
sha256sum package.tar.gz
# Comparar com hash oficial
4. Proteção de redes e serviços locais
Configure firewall local para restringir acesso a serviços de desenvolvimento:
# ufw (Ubuntu)
sudo ufw default deny incoming
sudo ufw allow ssh
sudo ufw allow from 127.0.0.1 to any port 3000 proto tcp # React dev server
sudo ufw allow from 127.0.0.1 to any port 5432 proto tcp # PostgreSQL
sudo ufw enable
Use TLS local com mkcert para simular HTTPS:
# Instalar mkcert
brew install mkcert # macOS
sudo apt install mkcert # Linux
# Criar CA local e certificados
mkcert -install
mkcert localhost 127.0.0.1 ::1
# Usar no servidor de desenvolvimento
# Exemplo com Vite: vite.config.js
server: {
https: {
key: fs.readFileSync('localhost-key.pem'),
cert: fs.readFileSync('localhost.pem'),
}
}
Nunca exponha portas de debug (9229 do Node.js, 5005 do Java) para rede externa. Vincule serviços apenas a 127.0.0.1:
# Node.js debug apenas local
node --inspect=127.0.0.1:9229 app.js
# Django development server
python manage.py runserver 127.0.0.1:8000
5. Práticas de segurança no ciclo de desenvolvimento
Integre análise estática antes do commit. Linters como ESLint, Bandit e RuboCop detectam vulnerabilidades comuns:
# ESLint com regras de segurança
npx eslint --rule 'no-eval: error' --rule 'no-implied-eval: error' src/
# Bandit para Python
bandit -r src/ -f json -o bandit-report.json
Escaneie dependências com ferramentas especializadas:
# Trivy (escaneia container e sistema de arquivos)
trivy fs --severity HIGH,CRITICAL .
trivy image node:18-alpine
# Snyk CLI
snyk test --all-projects
snyk monitor
# OWASP Dependency-Check
dependency-check --scan . --format HTML
Em pull requests, exija revisão de segurança antes do merge. Configure GitHub/GitLab para bloquear merges sem aprovação de segurança:
# .github/CODEOWNERS
# Arquivos sensíveis requerem aprovação do time de segurança
*.env* @security-team
Dockerfile @security-team
6. Backup e recuperação segura de dados locais
Criptografe volumes de dados sensíveis com dm-crypt/LUKS ou VeraCrypt:
# Criar volume criptografado com LUKS
sudo cryptsetup luksFormat /dev/sdb1
sudo cryptsetup open /dev/sdb1 secure-volume
sudo mkfs.ext4 /dev/mapper/secure-volume
sudo mount /dev/mapper/secure-volume /mnt/secure
Automatize backups criptografados com restic ou Borg:
# Restic com criptografia
export RESTIC_REPOSITORY="/backup/restic-repo"
export RESTIC_PASSWORD="senha-forte"
restic init
restic backup ~/projects --exclude='node_modules' --exclude='.venv'
restic snapshots
# Borg
borg init --encryption=repokey /backup/borg-repo
borg create /backup/borg-repo::projeto-$(date +%Y%m%d) ~/projects
Plano de resposta para vazamento de credenciais locais:
1. Identificar credencial comprometida (ex: chave de API no Git)
2. Revogar imediatamente no serviço correspondente (AWS, GitHub, etc.)
3. Rotacionar chave: gerar nova e atualizar .env
4. Executar gitleaks detect --verbose para verificar histórico
5. Remover commit comprometido com git filter-branch ou BFG Repo-Cleaner
# Remover segredo do histórico Git
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch .env" \
--prune-empty --tag-name-filter cat -- --all
git push origin --force --all
Referências
- Docker Security Best Practices — Documentação oficial da Docker sobre isolamento de containers e configurações seguras.
- Gitleaks: Protect and Discover Secrets — Ferramenta open-source para detecção de segredos vazados em repositórios Git.
- OWASP Dependency-Check — Ferramenta de análise de dependências que identifica vulnerabilidades conhecidas em bibliotecas.
- mkcert: Valid HTTPS for Localhost — Utilitário simples para criar certificados TLS confiáveis localmente.
- Restic: Fast and Secure Backup — Ferramenta de backup criptografado com suporte a múltiplos repositórios e deduplicação.
- pre-commit: Framework for Git Hooks — Documentação oficial do framework para gerenciar hooks de Git, incluindo verificações de segurança.
- Hashicorp Vault: Secrets Management — Guia de implantação local do Vault para gerenciamento centralizado de segredos.