Protegendo APIs REST

Melhores práticas para segurança em APIs modernas

api_security.sh

$ Guia completo para proteger suas APIs contra ameaças modernas

$ Implementações práticas e padrões de segurança

# Baseado nas melhores práticas da indústria e OWASP

Segurança em APIs REST

APIs são o alicerce das aplicações modernas, mas também são alvos frequentes de ataques. Protegê-las requer uma abordagem em camadas.

riscos

$ Ataques de injeção

$ Quebra de autenticação

$ Exposição de dados sensíveis

$ Ataques DDoS

benefícios

$ Proteção de dados dos usuários

$ Conformidade com regulamentações

$ Confiança dos clientes

$ Redução de custos com incidentes

Autenticação e Autorização

01

OAuth 2.0 e JWT

Desafios

Autenticação insegura é a principal causa de violações em APIs. Tokens mal configurados ou implementações incorretas podem comprometer todo o sistema.

Exemplos de Vulnerabilidades

exploit.sh
# Token JWT sem validação de assinatura
GET /api/user HTTP/1.1
Authorization: Bearer eyJhbGciOiJub25lIn0...

# Uso de algoritmo de assinatura fraco
{"alg": "HS256", "typ": "JWT"}
Token Roubado Assinatura Fraca Token Expirado

Melhores Práticas

  • Implementar OAuth 2.0 com PKCE para clientes públicos
  • Usar JWT com algoritmos fortes (RS256, ES256)
  • Definir tempo de vida curto para tokens de acesso
  • Implementar refresh tokens com revogação
solution.js
// Configuração segura de JWT
const jwt = require('jsonwebtoken');
const privateKey = process.env.PRIVATE_KEY;

const token = jwt.sign(
{ userId: 123 },
privateKey,
{ algorithm: 'RS256', expiresIn: '15m' }
);
OAuth 2.0 JWT Short-lived Tokens

Fluxo Seguro de Autenticação

1
Login do Usuário

O cliente envia credenciais para o endpoint de autenticação via HTTPS. Credenciais são validadas no servidor.

HTTPS Validação
2
Emissão de Tokens

O servidor emite um JWT de acesso (15min) e um refresh token (7 dias) assinados com chave privada.

JWT Expiração
3
Acesso à API

O cliente envia o token de acesso no header Authorization. O servidor valida a assinatura e permissões.

Validação RBAC
4
Refresh Token

Quando o token expira, o cliente usa o refresh token para obter um novo token de acesso sem requerer login.

Rotação Revogação

Validação de Dados

02

Validação de Entrada e Sanitização

Riscos

Dados não validados são a principal causa de injeção SQL, XSS e outros ataques que podem comprometer a API e os dados.

exploit.sh
# Injeção SQL através de parâmetro
GET /api/users?name=admin'-- HTTP/1.1

# XSS armazenado via JSON
POST /api/comments HTTP/1.1
{"text": "<script>malicious()</script>"}
SQLi XSS DoS

Defesas

  • Validar todos os inputs contra um schema estrito
  • Usar prepared statements para consultas SQL
  • Limitar tamanho e tipo de dados de entrada
  • Sanitizar dados antes de processar ou exibir
solution.js
// Validação com Joi
const schema = Joi.object({
username: Joi.string().alphanum().min(3).max(30),
email: Joi.string().email(),
age: Joi.number().integer().min(18)
});

const { error, value } = schema.validate(input);
Schema Validation Sanitization ORM

Proteção Contra Abuso

03

Rate Limiting e Throttling

Ameaças

APIs sem limitação de taxa são vulneráveis a ataques de força bruta, DDoS e abuso que podem derrubar o serviço.

attack.sh
# Ataque de força bruta em login
for i in {1..1000}; do
curl -X POST /api/login -d "user=admin&pass=pass$i"
done

# Ataque DDoS simples
ab -n 100000 -c 1000 https://api.example.com/
DDoS Brute Force API Abuse

Estratégias

  • Implementar rate limiting por IP, usuário e/ou chave API
  • Limites diferentes para endpoints críticos
  • Usar headers como Retry-After para clientes legítimos
  • Considerar soluções de WAF e DDoS na nuvem
solution.js
// Rate limiting com Express
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutos
max: 100, // 100 requisições por IP
message: 'Too many requests'
});

app.use('/api/', limiter);
Rate Limit WAF Cloudflare

Configurações de Segurança

04

Headers de Segurança

Problemas

Configurações padrão de servidores e frameworks podem expor informações sensíveis ou permitir comportamentos inseguros.

vulnerability.sh
GET / HTTP/1.1
Server: Apache/2.4.6 (CentOS)
X-Powered-By: PHP/5.6.40
Access-Control-Allow-Origin: *
# Informações expostas e CORS inseguro
Info Leak Clickjacking CORS Misconfig

Configurações Recomendadas

  • Implementar headers de segurança modernos
  • Remover headers que expõem informações do servidor
  • Configurar políticas de CORS restritivas
  • Forçar HTTPS e HSTS
solution.conf
# Headers de Segurança
Content-Security-Policy: default-src 'self'
Strict-Transport-Security: max-age=31536000
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Referrer-Policy: strict-origin-when-cross-origin
CSP HSTS CORS

Ferramentas Essenciais

Postman

Plataforma completa para testar e documentar APIs com recursos de segurança

Testing Documentation

OWASP ZAP

Scanner automatizado para encontrar vulnerabilidades em APIs

Pentesting Automation

Cloudflare

Proteção contra DDoS e gerenciamento de APIs em escala global

WAF CDN

Evolução da Segurança em APIs

Práticas Antigas Práticas Modernas Benefícios
Autenticação Basic OAuth 2.0 + JWT Tokens revogáveis e escopos
APIs monolíticas Microserviços com API Gateway Isolamento de riscos
Validação manual Schema validation automático Prevenção de injeção
Logs sensíveis Data Masking em logs Proteção de dados