Exposição de Dados em APIs: Prevenção e Detecção

A exposição indevida de dados através de APIs representa uma das principais vulnerabilidades em sistemas modernos. APIs mal configuradas ou inadequadamente protegidas podem vazar informações sensíveis, comprometer dados de usuários e violar regulamentações de privacidade como LGPD e GDPR.

Tipos de Exposição de Dados em APIs

1. Exposição Excessiva de Dados (API3:2023 - OWASP)

APIs que retornam mais informações do que o necessário:

  • Endpoint retorna objeto completo quando apenas alguns campos são necessários
  • Inclusão de campos sensíveis em respostas (senhas hash, tokens internos)
  • Metadados do sistema expostos em erros
      // [ERRO] Exemplo RUIM - Expondo dados demais
      GET /api/users/123
      {
      "id": 123,
      "name": "João Silva",
      "email": "joao@example.com",
      "password_hash": "$2b$10$...",  // [AVISO] Nunca expor
      "ssn": "123-45-6789",            // [AVISO] Dado sensível
      "internal_role_id": 42,          // [AVISO] Dado interno
      "created_at": "2025-01-01",
      "last_login_ip": "192.168.1.1"   // [AVISO] Informação sensível
      }
      // [OK] Exemplo BOM - Apenas dados necessários
      GET /api/users/123/profile
      {
      "id": 123,
      "name": "João Silva",
      "avatar_url": "https://..."
      }
      

2. Falta de Filtragem de Recursos (Broken Object Level Authorization)

Usuários podem acessar dados de outros usuários alterando IDs:

      // [ERRO] Vulnerável a IDOR (Insecure Direct Object Reference)
      GET /api/orders/456  // Usuário A pode ver pedidos do Usuário B
      // [OK] Protegido - Validar autorização
      app.get('/api/orders/:id', async (req, res) => {
      const order = await Order.findById(req.params.id);
      // Verificar se o pedido pertence ao usuário autenticado
      if (order.userId !== req.user.id) {
      return res.status(403).json({ error: 'Acesso negado' });
      }
      res.json(order);
      });
      

3. Exposição de Informações Sensíveis em URLs

  • Tokens de autenticação em query strings
  • Dados pessoais em paths
  • Informações confidenciais em logs de servidor

Estratégias de Prevenção

Implementar Data Transfer Objects (DTOs)

      // TypeScript - Definir claramente o que expor
      interface UserPublicDTO {
      id: number;
      name: string;
      avatar_url: string;
      }
      class UserService {
      async getPublicProfile(userId: number): Promise<UserPublicDTO> {
      const user = await db.users.findUnique({ where: { id: userId } });
      // Retornar apenas campos permitidos
      return {
      id: user.id,
      name: user.name,
      avatar_url: user.avatar_url
      };
      }
      }
      

Aplicar Filtros de Serialização

  • Usar bibliotecas como class-transformer (TypeScript)
  • Decoradores para marcar campos sensíveis (@Exclude)
  • Grupos de serialização para diferentes contextos (público vs. admin)

Validação de Autorização

      // Middleware de autorização
      const checkResourceOwnership = (resourceType) => {
      return async (req, res, next) => {
      const resource = await db[resourceType].findById(req.params.id);
      if (!resource) {
      return res.status(404).json({ error: 'Recurso não encontrado' });
      }
      if (resource.ownerId !== req.user.id && !req.user.isAdmin) {
      return res.status(403).json({ error: 'Acesso não autorizado' });
      }
      req.resource = resource;
      next();
      };
      };
      // Uso
      app.get('/api/documents/:id',
      authenticate,
      checkResourceOwnership('documents'),
      (req, res) => {
      res.json(req.resource);
      }
      );
      

Técnicas de Detecção

Análise de Payloads

  • Revisar manualmente responses de endpoints críticos
  • Usar ferramentas como Burp Suite, OWASP ZAP
  • Testes automatizados para verificar campos expostos

Monitoramento e Alertas

  • Detectar padrões de acesso anormais (enumeration)
  • Alertar sobre acessos negados excessivos
  • Monitorar volume de dados trafegados por usuário

Code Review e Static Analysis

  • Revisar DTOs e modelos de serialização
  • Verificar implementação de autorizações
  • Usar ferramentas SAST para identificar exposições

Melhores Práticas

  • Adotar princípio de menor privilégio para dados expostos
  • Implementar rate limiting para prevenir scraping
  • Usar UUIDs ao invés de IDs sequenciais
  • Criptografar dados sensíveis em trânsito e repouso
  • Implementar versionamento de API para mudanças seguras
  • Realizar testes de segurança regularmente
  • Documentar claramente quais dados cada endpoint expõe
  • Usar GraphQL com cuidado (pode facilitar over-fetching)

Conformidade e Regulamentação

  • LGPD/GDPR: Minimização de dados, base legal para processamento
  • PCI-DSS: Proteção de dados de cartão de crédito
  • HIPAA: Proteção de informações de saúde (EUA)
  • SOC 2: Controles de acesso e monitoramento