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.
$ Ataques de injeção
$ Quebra de autenticação
$ Exposição de dados sensíveis
$ Ataques DDoS
$ 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
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
GET /api/user HTTP/1.1
Authorization: Bearer eyJhbGciOiJub25lIn0...
# Uso de algoritmo de assinatura fraco
{"alg": "HS256", "typ": "JWT"}
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
const jwt = require('jsonwebtoken');
const privateKey = process.env.PRIVATE_KEY;
const token = jwt.sign(
{ userId: 123 },
privateKey,
{ algorithm: 'RS256', expiresIn: '15m' }
);
Fluxo Seguro de Autenticação
Login do Usuário
O cliente envia credenciais para o endpoint de autenticação via HTTPS. Credenciais são validadas no servidor.
Emissão de Tokens
O servidor emite um JWT de acesso (15min) e um refresh token (7 dias) assinados com chave privada.
Acesso à API
O cliente envia o token de acesso no header Authorization. O servidor valida a assinatura e permissões.
Refresh Token
Quando o token expira, o cliente usa o refresh token para obter um novo token de acesso sem requerer login.
Validação de Dados
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.
GET /api/users?name=admin'-- HTTP/1.1
# XSS armazenado via JSON
POST /api/comments HTTP/1.1
{"text": "<script>malicious()</script>"}
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
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);
Proteção Contra Abuso
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.
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/
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
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutos
max: 100, // 100 requisições por IP
message: 'Too many requests'
});
app.use('/api/', limiter);
Configurações de Segurança
Headers de Segurança
Problemas
Configurações padrão de servidores e frameworks podem expor informações sensíveis ou permitir comportamentos inseguros.
Server: Apache/2.4.6 (CentOS)
X-Powered-By: PHP/5.6.40
Access-Control-Allow-Origin: *
# Informações expostas e CORS inseguro
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
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
Ferramentas Essenciais
Postman
Plataforma completa para testar e documentar APIs com recursos de segurança
OWASP ZAP
Scanner automatizado para encontrar vulnerabilidades em APIs
Cloudflare
Proteção contra DDoS e gerenciamento de APIs em escala global
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 |