Segurança em APIs REST: Guia Prático Para Desenvolvedores
APIs REST são a espinha dorsal da maioria das aplicações modernas — e também o alvo número 1 de atacantes. A OWASP lista "Broken Authentication" e "Broken Access Control" como as vulnerabilidades mais críticas. Neste guia, mostro como proteger suas APIs de forma prática.
Autenticação: JWT vs Sessions
JWT (JSON Web Tokens) é o padrão mais usado para APIs stateless. O token contém as informações do usuário e é assinado criptograficamente.
Boas práticas com JWT: - Use tokens de curta duração (15-30 minutos) com refresh tokens - Armazene o refresh token em cookie httpOnly, não em localStorage - Inclua apenas o necessário no payload (userId, role) — nunca dados sensíveis - Use algoritmo RS256 (assimétrico) em vez de HS256 para ambientes distribuídos - Implemente blacklist para logout (Redis é ideal para isso)
Sessions ainda são válidas para aplicações monolíticas onde o frontend é servido pelo mesmo servidor. São mais simples e o servidor tem controle total sobre invalidação.
Rate Limiting
Sem rate limiting, sua API está vulnerável a brute force, scraping e DDoS.
Implemente em múltiplas camadas: - Global: 1000 requests/minuto por IP - Por endpoint: 10 tentativas de login/minuto por IP - Por usuário: 100 requests/minuto por usuário autenticado
Use Redis para contadores distribuídos. Middlewares como express-rate-limit ou o Throttle do Laravel facilitam a implementação.
Validação de Input
Nunca confie em dados do cliente. Valide absolutamente tudo.
Regras fundamentais: - Valide tipo, tamanho e formato de cada campo - Use allowlist (aceite apenas o esperado) em vez de blocklist - Sanitize outputs para prevenir XSS - Parameterize queries SQL — NUNCA concatene input do usuário em queries - Valide Content-Type e rejeite requests com tipos inesperados
Use bibliotecas como Zod (TypeScript) ou FormRequest (Laravel) para validação declarativa.
CORS (Cross-Origin Resource Sharing)
Configure CORS corretamente: - Nunca use Access-Control-Allow-Origin: asterisco em produção - Liste explicitamente os domínios permitidos - Restrinja os métodos HTTP permitidos - Defina headers personalizados permitidos
Headers de Segurança
Adicione esses headers em todas as respostas: - Strict-Transport-Security — força HTTPS - X-Content-Type-Options: nosniff — previne MIME sniffing - X-Frame-Options: DENY — previne clickjacking - Content-Security-Policy — controla recursos que podem ser carregados
Autorização: Controle de Acesso
Autenticação confirma quem é o usuário. Autorização define o que ele pode fazer.
Princípios: - Menor privilégio — cada usuário tem acesso apenas ao necessário - Verificação em cada endpoint — não confie apenas no frontend para esconder funcionalidades - Object-level authorization — verifique se o usuário tem acesso ao recurso específico, não apenas à rota
Logging e Monitoramento
- Logue todas as tentativas de autenticação (sucesso e falha) - Monitore padrões anormais de acesso - Use alertas para múltiplas falhas de login do mesmo IP - Nunca logue passwords, tokens ou dados sensíveis
Checklist de Segurança
- 1HTTPS em todos os endpoints (sem exceção)
- 2Autenticação robusta com tokens de curta duração
- 3Rate limiting em endpoints críticos
- 4Validação de input em todo endpoint
- 5CORS configurado corretamente
- 6Headers de segurança em todas as respostas
- 7Autorização verificada em cada request
- 8Logging de eventos de segurança
- 9Dependências atualizadas regularmente
- 10Testes de segurança automatizados no CI/CD
Conclusão
Segurança não é feature opcional — é requisito fundamental. Implemente essas práticas desde o início do projeto, não como remendo depois.
Se precisa de uma auditoria de segurança na sua API ou consultoria para implementar boas práticas, entre em contato.
Tem uma ideia de software para tirar do papel?
Eu analiso escopo, riscos técnicos e caminho de desenvolvimento em uma conversa gratuita de 30 minutos. Você sai com próximos passos claros, mesmo que ainda não esteja pronto para contratar.
Baixe grátis: Guia para Transformar Sua Ideia em Software
Não envio spam. Uso seus dados apenas para enviar o e-book e, se fizer sentido, responder sobre seu projeto.
Pablo Vinicius
Arquiteto de Software com 18+ anos de experiência. Ajudo empreendedores a transformar ideias em produtos digitais escaláveis e lucrativos. Arquiteto de software e desenvolvedor full stack com 18+ anos de experiência em sistemas, aplicativos, ERPs, SaaS, automações e integrações.