🚀 Capítulo 09: Segurança de APIs (Tema: Stargate)

NOTE

Este capítulo utiliza a temática de Stargate para explicar a Segurança de APIs. O portal conecta mundos; enviar o código de identificação correto e não sobrecarregar o portal são as regras de ouro!


1. 🎯 Objetivo da Aula

Compreender os riscos específicos de segurança em APIs (como REST), aprendendo a proteger rotas usando autenticação forte e limitação de taxa (Rate Limiting).

2. 🏢 O Cenário Prático (Seu Desafio)

O portal Stargate conecta a Terra a outros planetas.

  • Para atravessar o portal com segurança, as equipes enviam um código de rádio (GDO). Se o código for válido, a íris do portal se abre. Isso é a Autenticação da API.
  • Se qualquer um puder enviar requisições sem o código (Falta de Autenticação), invasores alienígenas entrarão na Terra.
  • Se um inimigo enviar 1 milhão de objetos pelo portal ao mesmo tempo, o portal vai travar. Isso é um ataque de negação de serviço (DoS).

No mundo web, as APIs são os portais que expõem os dados do seu sistema para o mundo. Seu desafio é garantir que apenas os viajantes autorizados passem e que o portal não seja sobrecarregado!


3. 🧠 Fundamentos: A Teoria Traduzida

As APIs (Application Programming Interfaces) são o alvo preferido dos hackers hoje em dia, pois elas lidam diretamente com os dados brutos, sem a interface visual para atrapalhar.

🛡️ Os 2 Maiores Riscos em APIs:

  1. BOLA (Broken Object Level Authorization):

    • O que é: O usuário está logado (Autenticado), mas consegue acessar dados de outros usuários apenas mudando o ID na URL.
    • Exemplo: Você acessa api/v1/perfil?id=10 e depois tenta mudar para id=11 para ver os dados do vizinho. Se a API deixar, houve falha de autorização!
  2. Falta de Rate Limiting (Limitação de Taxa):

    • O que é: O sistema não limita quantas vezes um usuário pode chamar a API por minuto.
    • Exemplo: Um robô tenta adivinhar a senha de um usuário fazendo 10.000 requisições por segundo. Sem limite, ele vai acabar descobrindo ou vai derrubar o servidor.

4. 📖 Exemplo Guiado: Implementando Rate Limiting (JS)

Para proteger o portal contra sobrecarga, usamos middlewares que contam quantas requisições aquele IP fez nos últimos minutos.

// Exemplo conceitual de Rate Limiting
const acessosPorIP = {};
 
function middlewareRateLimiter(req, res, next) {
    const ip = req.ip;
    acessosPorIP[ip] = (acessosPorIP[ip] || 0) + 1;
 
    if (acessosPorIP[ip] > 100) {
        // Se fez mais de 100 requisições
        return res.status(429).send("🚨 Muitas requisições! Tente novamente mais tarde.");
    }
    
    next(); // Permite que a requisição continue
}

5. 🛠️ Prática Obrigatória 1: Identificando a Falha na API

Diga qual das duas falhas (BOLA ou Falta de Rate Limiting) está ocorrendo em cada caso:

  1. Um usuário mal-intencionado conseguiu baixar a lista de todos os 10.000 clientes da empresa rodando um script que fazia requisições mudando o ID de 1 em 1.
  2. O servidor da empresa parou de responder porque um hacker enviou tantas mensagens de busca simultâneas que a memória do servidor esgotou.

6. 🛠️ Prática Obrigatória 2: O Código de Resposta HTTP

Quando o Rate Limiter bloqueia um usuário por excesso de requisições, qual é o Status Code HTTP padrão que deve ser retornado para avisar que ele passou do limite? (Dica: Falamos dele no exemplo guiado!).


7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 09 Seguranca) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

mod_12_desenvolvimento_seguro/
├── capitulos/
│   ├── capitulo_09_api.md
│   └── codigos/
│       └── cap09/
│           └── rate_limit.js

💡 Checkpoint de Lógica

Em APIs REST, nunca confie apenas no ID que o usuário envia. Verifique sempre se o usuário logado atualmente (donos do token JWT) tem permissão para ler aquele ID específico!

10. 🔥 Desafio de Fixação

Pesquise sobre o documento OWASP API Security Top 10 (sim, existe uma lista específica só para APIs!) e veja qual é o vilão número 1 dessa lista.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. BOLA (Quebra de autorização ao mudar o ID).
  2. Falta de Rate Limiting (Sobrecarga de requisições). Gabarito da Prática 2: O Status Code é o 429 (Too Many Requests).

Capitulo Anterior | Proximo Capitulo