SilentShield
← Retour au blog
ReleaseAJAXOpenCart

SilentShield 2.6 : les formulaires envoyés par clic et AJAX sont désormais vérifiés

Marc Wagner·8 octobre 2026·3 min de lecture

SilentShield 2.6 comble une faille qui a coûté à une boutique les inscriptions de son tunnel de commande : les formulaires envoyés par un clic sur un bouton et AJAX, au lieu d’un submit classique, ne nous étaient pas signalés. Cet article explique ce qui s’est passé, ce qui change et ce que vous devez faire. La liste complète figure dans le changelog.

Ce qui s’est mal passé

Le widget mesure la frappe et les mouvements de la souris et transmet le résultat lorsqu’un visiteur envoie un formulaire. Il écoutait l’événement submit du navigateur. Certaines boutiques ne déclenchent jamais cet événement. Le tunnel de commande d’OpenCart 3, par exemple, charge l’étape d’inscription en AJAX et l’envoie avec un simple bouton et jQuery.ajax.

Résultat : votre serveur interrogeait /v1/verify au sujet d’un visiteur dont nous n’avions reçu que le premier événement de page. Sans données de frappe ni de souris, le verdict était « suspicious », et l’inscription échouait pour une personne réelle. Le formulaire était protégé, mais la protection ne voyait pas le visiteur.

Ce qui change

Avec la version 2.6, le widget reconnaît aussi ce type d’envoi. Il examine la requête qui transporte le behavior_nonce. Si cette requête quitte la page sans événement submit et que le formulaire n’a pas encore été vérifié, le widget la retient un instant, signale l’envoi avec les données de frappe et de souris collectées, puis envoie la requête une fois le verdict reçu. Si aucune réponse n’arrive en 15 secondes, la requête est tout de même envoyée et votre serveur décide, comme auparavant.

Tout le reste reste identique : les formulaires avec un submit classique, les requêtes sans nonce et les envois de page simples ne sont pas touchés.

Comment nous l’avons testé

Nous avons reconstruit le tunnel de commande OpenCart dans notre environnement de test local avec le vrai jQuery et laissé un serveur client simulé appeler /v1/verify. Avec l’interrupteur désactivé, le formulaire envoyé par clic et AJAX était rejeté (HTTP 403, « suspicious », raisons NO_TYPING_PAUSES et NO_MOUSE_MOVEMENT). Avec l’interrupteur activé, le même visiteur était accepté (HTTP 200, « human »). Un formulaire avec un submit classique, un envoi de page simple et une requête sans nonce se comportaient de la même façon, interrupteur activé ou non.

À savoir

  • Il couvre les requêtes effectuées avec XMLHttpRequest, ce qui inclut jQuery.ajax. Les formulaires envoyés avec fetch() ne sont pas encore couverts, sauf le tunnel de commande par blocs de WooCommerce, qui dispose de son propre traitement.
  • Votre vérification côté serveur ne change pas. Continuez à appeler /v1/verify avec le nonce.

Guide d’intégration

Prêt à abandonner le CAPTCHA ?

Protégez vos formulaires — de manière invisible. Sans carte bancaire.