SilentShield
← Voltar ao Blog
VersãoAJAXOpenCart

SilentShield 2.6: os formulários enviados por clique e por AJAX passam a ser verificados

Marc Wagner·8 de outubro de 2026·3 min leitura

O SilentShield 2.6 fecha uma lacuna que custou a uma loja os registos no checkout: os formulários enviados com um clique num botão e por AJAX em vez de um submit normal não nos eram comunicados. Este artigo explica o que aconteceu, o que muda e o que tem de fazer. A lista completa está no changelog.

O que correu mal

O widget mede a escrita e o movimento do rato e comunica o resultado quando um visitante envia um formulário. Escutava o evento submit do navegador. Algumas lojas nunca disparam esse evento. O checkout do OpenCart 3, por exemplo, carrega o passo de registo por AJAX e envia-o com um simples botão e jQuery.ajax.

O resultado: o seu servidor consultava /v1/verify sobre um visitante de quem só tínhamos recebido o primeiro evento de página. Sem dados de escrita e de rato, o veredito era “suspicious” e o registo falhava para uma pessoa real. O formulário estava protegido, mas a proteção não conseguia ver o visitante.

O que muda

Com a versão 2.6, o widget reconhece também este tipo de envio. Observa o pedido que transporta o behavior_nonce. Se esse pedido sair da página sem um evento submit e o formulário ainda não tiver sido verificado, o widget retém-no por instantes, comunica o envio com os dados de escrita e de rato recolhidos e envia o pedido assim que o veredito chega. Se não chegar resposta em 15 segundos, o pedido é enviado de qualquer forma e o seu servidor decide, como antes.

Tudo o resto fica como estava: os formulários com submit normal, os pedidos sem nonce e os envios simples de página não são alterados.

Como o testámos

Reconstruímos o checkout do OpenCart no nosso ambiente de teste local com jQuery real e deixámos um servidor de cliente simulado chamar /v1/verify. Com o interruptor desligado, o formulário enviado por clique e AJAX foi rejeitado (HTTP 403, “suspicious”, motivos NO_TYPING_PAUSES e NO_MOUSE_MOVEMENT). Com o interruptor ligado, o mesmo visitante foi aceite (HTTP 200, “human”). Um formulário com submit normal, um envio simples de página e um pedido sem nonce comportaram-se da mesma forma com o interruptor ligado e desligado.

O que deve saber

  • Abrange os pedidos feitos com XMLHttpRequest, o que inclui jQuery.ajax. Os formulários enviados com fetch() ainda não estão abrangidos, exceto o checkout em blocos do WooCommerce, que tem tratamento próprio.
  • A sua verificação no servidor não muda. Continue a chamar /v1/verify com o nonce.

Guia de integração

Pronto para abandonar o CAPTCHA?

Comece a proteger os seus formulários — de forma invisível. Sem cartão de crédito.