🚀 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:
-
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=10e depois tenta mudar paraid=11para ver os dados do vizinho. Se a API deixar, houve falha de autorização!
-
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:
- 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.
- 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)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 09 Seguranca) e clique em Commit to main. - 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:
- BOLA (Quebra de autorização ao mudar o ID).
- Falta de Rate Limiting (Sobrecarga de requisições). Gabarito da Prática 2: O Status Code é o 429 (Too Many Requests).