Skip to content

[BUG] Web Widget mostra "conexão recusada" em sites externos — apiBase quebra o iframe + CSP bloqueia embed #136

Description

@vhfoliveira

Descrição

O snippet de instalação gerado pelo painel (Channels → Web Widget → Configuration) inclui apiBase no window.evoChatSettings. O SDK lê esse valor e injeta &api_base=... na URL do iframe, quebrando a inicialização do widget React.

Além disso, o nginx.conf do frontend define frame-ancestors 'self' no CSP global, bloqueando o embed do widget em sites de terceiros.

Passos pra reproduzir

  1. Pegar o snippet do painel (Settings → Inboxes → Web Widget → Configuration)
  2. Colocar em qualquer site externo
  3. Clicar no botão do chat → erro "A conexão com [domínio] foi recusada."

Causas

1. SDK injeta api_base na URL do iframe

No sdk.min.js:

if(settings && settings.apiBase){ params += '&api_base=' + encodeURIComponent(settings.apiBase) }

O snippet do painel define apiBase no window.evoChatSettings, e esse parâmetro na URL do iframe quebra a inicialização do widget React.

2. CSP frame-ancestors 'self' no nginx.conf

# linha 25 do nginx.conf do frontend
add_header Content-Security-Policy "... frame-ancestors 'self'; ..." always;

Apesar do comentário "Do not set X-Frame-Options globally because /widget must be embeddable", o CSP equivalente está ativo e bloqueia o embed. Confirmado: sem frame-ancestors * o widget nem carrega; com * carrega.

Workaround

Remover apiBase do snippet e trocar o CSP:

// ❌ snippet quebrado do painel
window.evoChatSettings = {"position":"right","type":"expanded_bubble","launcherTitle":"Chat","apiBase":"https://chat.exemplo.com"};

// ✅ funcional (sem apiBase)
window.evoChatSettings = {"position":"right","type":"expanded_bubble","launcherTitle":"Chat"};
# ❌ bloqueia embed
frame-ancestors 'self'
# ✅ permite embed
frame-ancestors *

Correção esperada

  1. SDK / Frontend: não gerar snippet com apiBase, ou o widget React tratar o parâmetro sem quebrar
  2. nginx.conf: trocar frame-ancestors 'self' por frame-ancestors *

Ambiente

  • Evo CRM Community v4.2.0
  • Docker Compose
  • nginx proxy reverso + frontend

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions