Configuração
Atributos do snippet, configuração remota, modos monitor e bloqueio, pausa e canais.
Quase toda a configuração do SDK é feita no dashboard e chega ao navegador pela configuração remota. O snippet só carrega a chave da loja e, quando há, as regras inline. Esta página mostra de onde vem cada ajuste e o que ele faz de fato no checkout.
Atributos do snippet
O shield.js lê os atributos data-* da própria tag <script>:
Propriedade
Tipo
Não existem outros atributos. O modo de proteção e o canal não são definidos por atributo: o modo vem do
dashboard e o canal é a própria URL do shield.js. O atributo data-safe-url, de versões antigas do snippet, é
ignorado.
Configuração remota
Ao iniciar, o SDK busca a configuração da loja em https://app.proteside.com/api/sdk/config. Quando as camadas
divergem, vale esta ordem de prioridade:
- Configuração remota (o que está salvo no dashboard);
- Snippet (atributos
data-*e regras inlinewindow.__PROTE_INLINE__); - Padrões do SDK.
| Comportamento | Detalhe |
|---|---|
| Tempo limite | 2 segundos. Se a resposta não chegar, o SDK segue com o snippet e os padrões. |
| Falha | Chave inválida, erro ou falta de rede não quebram a página: o SDK segue com os padrões locais. |
| Início das detecções | Os módulos de detecção só começam depois da resposta (ou do tempo limite). Até lá, o bootstrapper guarda o que acontece e o SDK processa depois. |
| Cache | A resposta pode ficar em cache por 60 segundos no navegador e na CDN. |
Alterações podem levar mais de 60 segundos
O dashboard diz que as alterações chegam ao SDK em até 60 segundos. A CDN pode continuar servindo a resposta antiga
por mais alguns minutos enquanto busca a nova, principalmente em lojas com pouco tráfego. Para testar uma mudança,
aguarde alguns minutos e confira com Proteside.getStatus().
O que vem do dashboard
A maior parte fica em Configurações → Proteção do pagamento:

| Ajuste no dashboard | Efeito no SDK |
|---|---|
| Recebedores confiáveis | Hashes das chaves Pix, endereços cripto, VPAs UPI e bancos de boleto da loja. Veja Integridade de pagamento e Pix. |
| Modo de proteção | Monitorar ou Bloquear. Veja abaixo. |
| Modo desenvolvedor | Pausa o SDK. Veja Pausa e modo desenvolvedor. |
| Canal de release do SDK | Só informativo para o SDK. O canal efetivo é a URL colada no snippet. Veja Canais. |
| Origens de iframe esperadas | Hosts dos iframes legítimos de pagamento. Com a lista preenchida, o SDK alerta iframes de provedores fora dela, iframes sobrepostos aos esperados e campos de cartão digitáveis fora do iframe. |
| Containers GTM permitidos | Com a lista preenchida, containers do Google Tag Manager fora dela são bloqueados. Veja o aviso abaixo. |
| Service workers permitidos | Com a lista preenchida, service workers fora dela são reportados e, no modo Bloquear, removidos. |
| Métodos de pagamento | Métodos exibidos como monitorados. Não desliga a detecção. Veja Métodos de pagamento. |
| Campos sensíveis | Seletores dos campos vigiados contra keyloggers e sobreposições. |
| Calibração (segundos) | Tempo de aprendizado depois do carregamento (10 a 120 s, padrão 30). |
| Verificação de overlay (ms) | Intervalo entre verificações de elementos sobrepostos (mínimo 500, padrão 2000). |
| Ordem de instalação | Avisar (alerta) envia INSTALLATION_ORDER_WARNING; Silenciar não envia o evento, mas installationOrderValid continua false. |
As regras de Regras (bloquear ou permitir por Domínio ou URL do script) também vêm na configuração remota. Regras inativas não são enviadas. Listas vazias significam "sem restrição".
Regras por hash de conteúdo não são aplicadas no navegador
A tela de Regras oferece o alvo Hash de conteúdo, mas o SDK ignora essas regras: elas não bloqueiam nenhum script no checkout. Para impedir um script, use uma regra por Domínio ou URL do script.
Campos sensíveis
Por padrão, o SDK vigia estes seletores:
#card-number, #card-cvv, #card-expiry, #card-name,
[data-proteside-sensitive],
input[autocomplete="cc-number"],
input[autocomplete="cc-csc"]Para incluir um campo próprio sem mexer no dashboard, marque-o com o atributo data-proteside-sensitive:
<input id="cpf" name="cpf" data-proteside-sensitive />Se você desligar Usar a lista padrão da Proteside e informar uma lista própria, ela substitui a padrão.
Inclua [data-proteside-sensitive] na sua lista se quiser manter o atributo funcionando.
Modo monitor e modo bloqueio
O modo é escolhido em Proteção do pagamento → Modo de proteção e chega ao SDK pela configuração remota.
O que acontece em qualquer modo
Regras e lista de GTM bloqueiam também no modo Monitorar
A tela descreve o modo Monitorar como "sem interferir na página" e diz que containers fora da lista são bloqueados "no modo Bloquear". No navegador, as regras de bloqueio (por domínio ou URL) e a lista de Containers GTM permitidos bloqueiam scripts nos dois modos. Se você quer só observar, não crie regras de bloqueio e deixe a lista de GTM vazia.
- Um script inserido por JavaScript que casa com uma regra de bloqueio não chega a entrar na página. O SDK envia
SCRIPT_BLOCKED. - Com a lista de GTM preenchida,
googletagmanager.com/gtm.jsegoogletagmanager.com/gtag/jscom ID fora da lista são barrados. O SDK enviaGTM_CONTAINER_BLOCKED. - Uma regra Permitir que case com o script anula as regras de bloqueio.
cdn.proteside.comeapp.proteside.comnunca são bloqueados.
A lista de GTM também barra GA4 e Google Ads
A lista aceita só IDs no formato GTM-XXXXXXX, mas o bloqueio vale também para gtag/js. Com a lista preenchida,
qualquer tag do Google Analytics 4 (G-…) ou do Google Ads (AW-…) carregada por JavaScript, inclusive pelo próprio
GTM, é bloqueada, e não há como incluir esses IDs na lista. Antes de ativar a lista, confirme se a loja usa GA4 ou
Google Ads carregados dessa forma.
O que muda no modo Bloquear
Além de alertar, o SDK tenta neutralizar a adulteração:
| Detecção | Ação no modo Bloquear |
|---|---|
SCRIPT_INJECTION de script desconhecido | Remove a tag do script depois de detectar. |
FORM_ACTION_HIJACK | Restaura o action original do formulário. |
OVERLAY_DETECTED | Remove o elemento sobreposto. |
PIX_TAMPERED, UPI_TAMPERED, QR_TAMPERED, BOLETO_TAMPERED, CRYPTO_ADDRESS_SWAP (texto alterado) | Reescreve o texto com o valor original capturado. |
| Recebedor fora da lista de confiáveis | Troca o texto lido por ⚠︎ e marca o elemento com data-proteside-blocked="untrusted_recipient". |
CLIPBOARD_HIJACK | Regrava a área de transferência com o valor original. |
SERVICE_WORKER_BLOCKED | Remove o registro do service worker. |
Estas detecções só alertam, em qualquer modo: EXFILTRATION_ATTEMPT, KEYLOGGER_DETECTED,
WEBSOCKET_EXFILTRATION, IFRAME_REPLACED, IFRAME_UNEXPECTED, CARD_FIELD_OUTSIDE_VAULT, AMOUNT_TAMPERED,
SCRIPT_MODIFIED e FIELD_ACCESS.
Remover um script não desfaz o que ele já executou
Quando um script já entrou na página, retirar a tag não cancela a execução. Só o bloqueio antes da inserção, feito pelo bootstrapper com as regras, impede de fato que o script rode. Por isso, para um script indesejado, crie uma regra de bloqueio em vez de depender só do modo Bloquear.
No modo Bloquear, uma regra errada pode quebrar o checkout. Comece em Monitorar, revise os alertas por algumas semanas e teste o modo Bloquear em uma página de baixo tráfego antes de ativar em toda a loja.
Pausa e modo desenvolvedor
O SDK fica pausado quando:
- o Modo desenvolvedor está ligado em Proteção do pagamento;
- a assinatura não está vigente ou a loja não está ativa.
Pausado, o SDK envia um único PAGEVIEW marcado como pausado a cada carregamento de página (a tela fala em "1
pageview por sessão") e não inicia nenhum módulo de detecção. Proteside.getStatus().paused fica true e a
Saúde do SDK mostra SDK pausado (modo desenvolvedor).
Regras inline continuam valendo no modo desenvolvedor
O bootstrapper aplica as regras gravadas no snippet (window.__PROTE_INLINE__) antes de saber que a loja está
pausada. Com o modo desenvolvedor ligado, os scripts que casam com essas regras continuam bloqueados, mas sem
nenhum evento no dashboard. Se precisar desativar um bloqueio durante a integração, remova a regra e recole o
snippet.
Há também a pausa local, chamada pela própria página com Proteside.pause(). Ela vale
só para aquele carregamento.
Canais
O canal de release (stable ou latest) é definido pela URL do shield.js no snippet. Veja
Canais stable e latest.