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.