Essenciais de Segurança Web: SSRF, CSRF e CORS Explicados
No cenário web moderno, a segurança não é apenas uma funcionalidade — é uma fundação. À medida que as aplicações se tornam mais interconectadas, entender as nuances de como as requisições são tratadas em diferentes origens e servidores é crucial para qualquer desenvolvedor.
Hoje, vamos mergulhar em três conceitos críticos que todo desenvolvedor web deve dominar: SSRF, CSRF e CORS. Embora possam parecer uma sopa de letrinhas, eles representam as linhas de frente da segurança de aplicações web.
1. SSRF (Server-Side Request Forgery)
SSRF é uma vulnerabilidade onde um atacante pode forçar uma aplicação do lado do servidor a fazer requisições HTTP para um domínio arbitrário de escolha do atacante.
Como Funciona
Imagine uma aplicação web que recebe uma URL como entrada (ex: para buscar uma foto de perfil ou pré-visualizar um link) e então faz uma requisição para essa URL a partir do servidor. Se a aplicação não validar corretamente essa URL, um atacante pode fornecer um endereço IP interno ou um endereço de loopback (127.0.0.1).
O servidor, agindo como um proxy, pode então buscar dados sensíveis de serviços internos que não estão expostos à internet pública, tais como:
- Metadados de Nuvem: Acessar
169.254.169.254na AWS/GCP para recuperar credenciais IAM. - Painéis de Admin Internos: Acessar ferramentas internas como Jenkins ou dashboards de Kubernetes.
- Escaneamento de Portas: Descobrir outros serviços rodando na rede interna.
Prevenção
- Allowlisting: Permita apenas requisições para uma lista predefinida de domínios confiáveis.
- Validação de Entrada: Garanta que a URL use protocolos permitidos (ex: apenas
https://) e não aponte para faixas de IP interno. - Segregação de Rede: Garanta que o servidor web tenha acesso restrito a recursos internos.
2. CSRF (Cross-Site Request Forgery)
CSRF é um ataque que engana o navegador de uma vítima para realizar uma ação indesejada em outro site onde a vítima está autenticada no momento.
Como Funciona
Este ataque explora o fato de que os navegadores incluem automaticamente credenciais de ambiente — como cookies de sessão — em cada requisição para um domínio.
- Um usuário faz login em
bank.com. - O usuário visita um site malicioso
evil.comem outra aba. - O site
evil.comcontém um formulário oculto que envia uma requisiçãoPOSTparabank.com/transfer?amount=1000&to=attacker. - O navegador envia a requisição junto com o cookie de sessão do usuário para o
bank.com. - O
bank.comvê uma sessão válida e processa a transferência.
Prevenção
- Tokens Anti-CSRF: Inclua um token único, secreto e imprevisível em cada requisição que altere o estado. O servidor verifica este token antes do processamento.
- Cookies SameSite: Defina o atributo
SameSitenos cookies comoStrictouLaxpara evitar que sejam enviados em requisições entre sites. - Headers Personalizados: Para requisições AJAX, exija um header personalizado (ex:
X-Requested-With) que não possa ser definido por um formulário HTML padrão.
3. CORS (Cross-Origin Resource Sharing)
Diferente de SSRF e CSRF, o CORS não é uma vulnerabilidade em si, mas um mecanismo de segurança. É uma forma de os servidores dizerem ao navegador: “Tudo bem que esta origem externa específica acesse meus recursos.”
Por Que Existe
Por padrão, os navegadores aplicam a Política de Mesma Origem (SOP), que impede que um script em um site leia dados de outro site. Isso evita que o evil.com leia seus e-mails no gmail.com.
O CORS permite que os servidores relaxem essa política com segurança. Quando um web app faz uma requisição cross-origin, o navegador envia um header Origin. O servidor responde com Access-Control-Allow-Origin.
Erros Comuns de Configuração
- Origem Wildcard (
*): Permitir todas as origens. Embora seja aceitável para APIs públicas, é perigoso se combinado comAccess-Control-Allow-Credentials: true. - Refletir a Origem: Definir dinamicamente a origem permitida com base no header
Originsem validação. Isso efetivamente ignora completamente a SOP.
Melhores Práticas
- Seja Específico: Permita apenas os domínios específicos que precisam de acesso.
- Evite Credenciais se possível: Se sua API não precisa de cookies ou headers de autorização, não os permita.
- Use um Middleware de Segurança: Use bibliotecas bem testadas para lidar com a configuração de CORS em vez de gerenciar os headers manualmente.
Resumo Comparativo
| Característica | SSRF | CSRF | CORS |
|---|---|---|---|
| Alvo | Recursos do lado do servidor | Ações do lado do cliente | Acesso a dados via navegador |
| Explora | Confiança de rede do servidor | Comportamento de cookies do navegador | Política de Mesma Origem (má config.) |
| Defesa Primária | Allowlisting e Validação | Tokens e Cookies SameSite | Configuração correta de Headers |
Entender esses três pilares da segurança web é essencial para construir aplicações modernas e robustas. Ao implementar estratégias de defesa em profundidade, você pode proteger tanto a infraestrutura interna do seu servidor quanto os dados privados dos seus usuários.
Mantenha-se seguro e boa codificação!