Geração Dinâmica de Cards Open Graph Multi-Tenant
O módulo de Cards Open Graph Dinâmicos resolve a apresentação institucional de parceiros white-label ao compartilhar URLs da aplicação em plataformas de mensageria (WhatsApp, Telegram, Slack) e redes sociais (LinkedIn, Twitter/X, Facebook).
1. Contexto do Problema e Incompatibilidade de Crawlers
Scrapers de redes sociais e mensageiros operam como clientes HTTP estáticos (Headless Link Scrapers, ex.: facebookexternalhit/1.1, WhatsApp/2.x). Eles:
1. Não executam JavaScript: A injeção de metatags deve ocorrer estritamente durante o Server-Side Rendering (SSR) do Nuxt 4.
2. Rejeitam SVGs para Previews: O WhatsApp e o Facebook descartam silenciosamente qualquer imagem declarada em og:image cujo formato seja .svg. A imagem deve ser rasterizada em PNG, JPEG ou WebP.
3. Exigem URLs Canônicas Absolutas: Caminhos relativos (/api/og) não são resolvidos por crawlers.
3. Controles Estritos de Segurança (SecOps & Anti-SSRF)
A recuperação de assets de terceiros pelo servidor backend introduz vetores de risco que são neutralizados pelas seguintes salvaguardas:
| Vetor de Risco | Mitigação Arquitetural Implementada |
|---|---|
SSRF para Redes Privadas |
Validação mandatória de IP pós-resolução DNS antes da abertura de socket TCP, bloqueando |
DNS Rebinding |
O socket conecta-se estritamente ao endereço IP previamente validado, sem reexecutar resolução de DNS. |
Bypass por Redirecionamento |
|
Host-Header Poisoning |
Ignora |
Estouro de Memória (DoS) |
Limite estrito de 2 MB de payload para logos e conferência de magic bytes binários ( |
4. Cache em Camadas e Isolamento Multi-Tenant
-
Vercel Edge CDN:
-
Diretiva:
Cache-Control: public, s-maxage=86400, stale-while-revalidate=604800. -
Cabeçalho
Vary: Host, Accept-Encodinggarante que o cache na CDN seja fatiado pelo domínio do parceiro, impedindo que um tenant visualize o card de outro.
-
-
Nitro Runtime In-Memory Cache:
-
Armazenamento temporário de buffers PNG e Data URIs indexados por chave determinística
og:${cleanHost}:${versionHash}.
-
-
Budget Operacional de Tamanho:
-
Garantia de PNG com tamanho inferior a 300 KB para máxima velocidade de entrega em redes móveis.
-