image

Acesse bootcamps ilimitados e +650 cursos pra sempre

75
%OFF
Article image
Luiz Freitas
Luiz Freitas09/12/2025 10:01
Compartilhe

Segurança em APIs RESTFul: o elo fraco que ninguém quer falar

    83% dos vazamentos de dados em APIs acontecem por configurações incorretas, não por ataques sofisticados.

    Deixa eu repetir: não são hackers geniais quebrando criptografia.

    São endpoints desprotegidos, tokens expostos e validações esquecidas.

    E o mais frustrante?

    Toda falha poderia ter sido evitada com boas práticas básicas.

    Se você desenvolve APIs, este é o artigo mais importante da série.

    O inimigo invisível: a pressa

    No início, toda API nasce simples:

    • Alguns endpoints
    • Um token básico
    • "Depois eu arrumo a segurança"

    Esse "depois" raramente chega.

    E quando chega, já é tarde demais.

    A segurança não é um recurso opcional — é pré-requisito.

    É a diferença entre um sistema confiável e um incidente de R$ 2 milhões.

    Checklist: os 7 pilares da segurança em APIs

    1️⃣ Autenticação e Autorização

    O problema:

    Tokens JWT sem expiração, segredos hardcoded, permissões genéricas demais.

    A solução:

    // ❌ ERRADO
    const token = jwt.sign({ userId: 123 }, 'secret123');
    ​
    // ✅ CORRETO
    const token = jwt.sign(
    { userId: 123, scope: ['read:orders'] },
    process.env.JWT_SECRET,
    { expiresIn: '15m', algorithm: 'RS256' }
    );
    

    Regras de ouro:

    • Use OAuth 2.1 ou JWT com rotação automática
    • Nunca armazene segredos no código (use variáveis de ambiente)
    • Implemente refresh tokens com expiração curta

    2️⃣ Rate Limiting

    O problema:

    Endpoints sem limite permitem força bruta, scraping e ataques de negação de serviço.

    A solução:

    // Express + express-rate-limit
    const rateLimit = require('express-rate-limit');
    ​
    const apiLimiter = rateLimit({
    windowMs: 15 * 60 * 1000, // 15 minutos
    max: 100, // 100 requisições
    standardHeaders: true,
    legacyHeaders: false,
    message: 'Muitas requisições. Tente novamente em 15 minutos.'
    });
    ​
    app.use('/api/', apiLimiter);
    

    Benefício: Protege contra bots, reduz custos de infraestrutura, melhora UX.

    3️⃣ Validação de Entrada

    O problema:

    Toda entrada é potencialmente maliciosa até provar o contrário.

    A solução:

    // Usando Zod para validação
    const userSchema = z.object({
    email: z.string().email().max(255),
    age: z.number().int().min(18).max(120),
    role: z.enum(['user', 'admin'])
    });
    ​
    app.post('/users', (req, res) => {
    try {
      const validated = userSchema.parse(req.body);
      // Processa dados validados
    } catch (error) {
      return res.status(400).json({ error: error.errors });
    }
    });
    

    Nunca confie no cliente. SQL Injection, XSS e Command Injection começam com validação fraca.

    4️⃣ HTTPS sempre. Sempre. SEMPRE.

    O problema:

    "Ah, é só uma API interna, não precisa de HTTPS."

    A realidade:

    Todo tráfego HTTP pode ser interceptado. Sem exceções.

    A solução:

    • Use Let's Encrypt (grátis) ou Cloudflare
    • Force HTTPS com redirecionamento automático
    • Configure HSTS (HTTP Strict Transport Security)
    # Nginx config
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    

    5️⃣ CORS configurado corretamente

    O problema:

    // ❌ NUNCA FAÇA ISSO
    app.use(cors({ origin: '*' }));
    

    A solução:

    // ✅ CORRETO
    app.use(cors({
    origin: [
      'https://meuapp.com',
      'https://app.meuapp.com'
    ],
    credentials: true,
    methods: ['GET', 'POST', 'PUT', 'DELETE'],
    allowedHeaders: ['Content-Type', 'Authorization']
    }));
    

    6️⃣ Respostas de erro seguras

    O problema:

    // ❌ Expondo estrutura interna
    {
    "error": "MongoError: duplicate key error collection: users.email",
    "stack": "at Connection._executeCommand (/app/node_modules/mongodb/...)"
    }
    

    A solução:

    // ✅ Genérico para o cliente
    {
    "error": {
      "code": "RESOURCE_CONFLICT",
      "message": "Este email já está em uso"
    }
    }
    

    Log completo apenas internamente. Nunca exponha stack traces, queries ou estrutura de banco.

    7️⃣ Logging e monitoramento

    O que registrar:

    • Tentativas de autenticação (sucesso e falha)
    • Mudanças em recursos críticos
    • Rate limit hits
    • Requisições com payloads suspeitos

    Ferramentas essenciais:

    • OWASP ZAP (pentesting automatizado)
    • Datadog/New Relic (monitoramento em tempo real)
    • Sentry (rastreamento de erros)

    Falhas reais que derrubaram empresas

    Caso 1: Twitter (2022)

    • Endpoint administrativo sem autenticação reforçada
    • Resultado: 5.4 milhões de contas expostas

    Caso 2: T-Mobile (2021)

    • Tokens em logs públicos do CloudWatch
    • Resultado: Dados de 50 milhões de clientes vazados

    Caso 3: Startup de fintech brasileira

    • CORS configurado como *
    • Resultado: Ataque XSS que drenou contas de usuários

    Cada uma dessas falhas poderia ser evitada com as práticas acima.

    Segurança não é obstáculo: é credibilidade

    Muitos devs tratam segurança como "algo que atrasa o deploy".

    Mas segurança não é freio — é confiança.

    É a diferença entre:

    • Uma startup que cresce
    • E uma que fecha por vazamento de dados

    Empresas como Stripe, Auth0 e Plaid cresceram não só pela tecnologia — mas porque os desenvolvedores confiam nelas.

    E confiança é o ativo mais valioso de qualquer API.

    Autoavaliação: sua API está segura?

    Responda honestamente:

    • Meus tokens JWT têm expiração curta?
    • Tenho rate limiting em todos os endpoints públicos?
    • Valido e sanitizo TODA entrada do usuário?
    • Uso HTTPS em produção (e staging)?
    • Meu CORS está configurado com domínios específicos?
    • Logs de erro não expõem estrutura interna?
    • Monitoro tentativas de acesso suspeitas?

    Menos de 7 "sim"?

    Você tem trabalho pela frente.

    7 de 7?

    Parabéns. Você está nos 20% que levam segurança a sério.

    E a sua API?

    Me conta nos comentários:

    Qual desses 7 pilares você implementa consistentemente?

    E qual você sabe que deveria melhorar (mas ainda não priorizou)?

    Sem julgamentos. Segurança é uma jornada, não um destino. 🛡️

    📅 Próxima semana:

    Vamos mudar completamente o ângulo e olhar APIs como produto digital, explorando como empresas monetizam integrações e transformam endpoints em linhas de receita.

    Compartilhe
    Recomendados para você
    GitHub Copilot - Código na Prática
    CI&T - Backend com Java & AWS
    Nexa - Machine Learning e GenAI na Prática
    Comentários (0)