Segurança de APIs
APIs são a espinha dorsal das aplicações modernas. Proteger endpoints REST e GraphQL contra acesso não autorizado, injeção de código e abuso é fundamental para a segurança da aplicação.
OWASP API Security Top 10
1. Broken Object Level Authorization
Falhas que permitem acesso a objetos de outros usuários manipulando IDs nos requests.
- Sempre validar que o usuário tem permissão para acessar o recurso solicitado
- Usar identificadores aleatórios (UUID) em vez de IDs sequenciais
- Implementar testes automatizados de autorização
2. Broken Authentication
Vulnerabilidades em mecanismos de autenticação que permitem assumir identidade de outros usuários.
- Implementar MFA (Multi-Factor Authentication)
- Usar tokens com tempo de expiração curto
- Implementar rate limiting em endpoints de login
- Validar tokens em todas as requisições
3. Broken Object Property Level Authorization
Exposição ou modificação de propriedades que deveriam ser restritas (mass assignment).
4. Unrestricted Resource Consumption
Falta de limites em requisições permitindo DoS e consumo excessivo de recursos.
5. Broken Function Level Authorization
Usuários acessando funções administrativas manipulando endpoints.
Autenticação e Autorização
OAuth 2.0
Framework de autorização industry-standard para delegação de acesso.
- Authorization Code Flow: Para aplicações web server-side
- PKCE: Proof Key for Code Exchange para SPAs e mobile
- Client Credentials: Para comunicação machine-to-machine
- Refresh Tokens: Para manter sessões sem re-autenticação
JSON Web Tokens (JWT)
- Usar algoritmos seguros (RS256, ES256) em vez de HS256 quando possível
- Validar issuer (iss), audience (aud) e expiration (exp)
- Não armazenar dados sensíveis no payload (JWT é decodificável)
- Implementar token rotation e blacklisting para logout
- Usar short-lived access tokens (15 min) com refresh tokens
API Keys
- Usar para autenticação de serviços, não usuários finais
- Rotacionar keys periodicamente
- Implementar diferentes níveis de permissão por key
- Monitorar uso e detectar anomalias
Rate Limiting e Throttling
Estratégias de Rate Limiting
- Fixed Window: Limite fixo por janela de tempo (ex: 100 req/min)
- Sliding Window: Janela deslizante mais precisa
- Token Bucket: Permite bursts controlados
- Leaky Bucket: Processa requisições em taxa constante
Implementação
- Limites diferentes por endpoint e tier de usuário
- Headers informativos: X-RateLimit-Limit, X-RateLimit-Remaining
- Resposta 429 Too Many Requests com Retry-After header
- Usar Redis para armazenamento distribuído de contadores
API Gateways
Camada centralizada para gerenciar, monitorar e proteger APIs.
Funcionalidades Principais
- Authentication & Authorization: Validação centralizada
- Rate Limiting: Proteção contra abuso
- Request/Response Transformation: Adaptação de formatos
- Logging & Monitoring: Visibilidade completa
- Caching: Melhoria de performance
- Load Balancing: Distribuição de carga
Soluções Populares
- Kong: Gateway open-source baseado em Nginx
- AWS API Gateway: Solução managed da AWS
- Apigee: Plataforma enterprise do Google
- Azure API Management: Gateway da Microsoft
- Tyk: Gateway open-source em Go
Segurança REST vs GraphQL
REST API Security
- Usar versioning (/v1/, /v2/) para backward compatibility
- Implementar HATEOAS para descoberta de recursos
- Validar Content-Type e Accept headers
- Usar HTTPS exclusivamente
- Implementar CORS adequadamente
GraphQL Security
- Query Depth Limiting: Prevenir queries recursivas
- Query Complexity Analysis: Calcular custo antes de executar
- Disable Introspection: Em produção, desabilitar schema introspection
- Field-Level Authorization: Controlar acesso por campo
- Persistent Queries: Whitelist de queries permitidas
Input Validation e Sanitization
Validação de Input
- Validar tipo, formato, comprimento e range de todos os inputs
- Usar schemas (JSON Schema, OpenAPI) para validação automática
- Whitelist de valores aceitos quando possível
- Rejeitar requisições com dados inválidos (fail securely)
Prevenção de Injection
- SQL Injection: Usar prepared statements e ORMs
- NoSQL Injection: Validar e sanitizar queries
- Command Injection: Evitar execução de comandos do sistema
- LDAP Injection: Escapar caracteres especiais
Monitoramento e Logging
Logs Essenciais
- Todas as tentativas de autenticação (sucesso e falha)
- Mudanças em dados sensíveis
- Falhas de autorização
- Rate limiting violations
- Erros e exceções
Métricas de Segurança
- Taxa de requisições por endpoint
- Latência e timeouts
- Status codes (especialmente 401, 403, 429)
- Padrões anormais de tráfego
Melhores Práticas
- Usar HTTPS/TLS 1.3 exclusivamente
- Implementar security headers (HSTS, CSP, X-Frame-Options)
- Versionar APIs para permitir updates seguros
- Documentar APIs com OpenAPI/Swagger
- Implementar health checks e graceful degradation
- Usar UUIDs em vez de IDs sequenciais
- Não expor stack traces ou mensagens de erro detalhadas
- Implementar timeout em todas as operações
- Realizar testes de segurança automatizados (DAST)
Ferramentas de Teste
- Postman: Testes manuais e automatizados de API
- Burp Suite: Proxy e scanner de vulnerabilidades
- OWASP ZAP: Scanner automático open-source
- Insomnia: Cliente REST e GraphQL
- GraphQL Voyager: Visualização de schema GraphQL
Segurança de APIs requer uma abordagem em múltiplas camadas, combinando autenticação robusta, autorização granular, validação rigorosa de inputs, rate limiting, monitoramento contínuo e testes regulares. Com APIs sendo cada vez mais o alvo principal de ataques, investir em segurança desde o design é fundamental para proteger dados e manter a confiança dos usuários.
