Skip to main content
Blog
Blog Attacks

Qu'est-ce que le formjacking ? Comment fonctionne l'attaque et comment l'arrêter

Le formjacking est une attaque côté client qui injecte du JavaScript pour capturer les données de paiement et de connexion pendant que l'utilisateur les saisit. Découvrez comment l'attaque fonctionne, pourquoi les outils traditionnels ne la détectent pas et comment l'identifier.

Jul 18, 2026 11 min read
Qu'est-ce que le formjacking ? Comment fonctionne l'attaque et comment l'arrêter

En bref : qu'est-ce que le formjacking

  • Du JavaScript injecté sur un formulaire pour voler ce que les utilisateurs saisissent avant submit. Champs de carte, credentials ou PII.
  • Il tourne dans le navigateur après le service de la page. Votre WAF et vos logs d'origine ne voient rien. Le script compromis se trouve dans un domaine autorisé de confiance.
  • Voie conformité : inventaire de scripts 6.4.3 et détection d'altération 11.6.1. Voie technique : monitoring en session.

Formjacking — the skimmer's older cousin

Comment fonctionne le formjacking

Une attaque de formjacking se déroule en quatre étapes.

Diagramme de flux montrant un script de formjacking injecté via un script tiers compromis, accrochant les champs du formulaire de checkout, copiant les données de carte et les exfiltrant vers un endpoint de l'attaquant pendant que le paiement légitime se termine

Le diagramme suit un passage en caisse (shop.example[.]com/checkout) à travers cinq étapes, et montre pourquoi une vue au niveau réseau reste aveugle tandis qu'une vue au niveau navigateur le détecte :

ÉtapeCe qui se passe dans le navigateurCe que voit le serveur / la CSP
1. Page de checkoutL'acheteur saisit le numéro de carte + le CVV dans le vrai formulaireChargement de page normal
2. Script fournisseur falsifiéwidget.js (modified) se charge comme n'importe quelle autre balise tierceUne URL de script autorisée et déjà de confiance
3. Skimmer de formulaireL'écouteur injecté s'accroche à chaque champ de saisie et lit les frappes en temps réelRien, aucune requête vers le serveur
4. Endpoint d'exfiltrationCopie encodée envoyée à cdn-metrics[.]example via POST /collect?d=eyJjYyI6…, déguisée en balise d'analyseRessemble à du trafic d'analyse ordinaire
5. AttaquantCartes volées revendues ou utilisées pour de la fraude au carding ; le vrai paiement aboutit quand mêmeAucune anomalie, la transaction réussit

La couche réseau est aveugle parce que la requête d'exfiltration quitte le navigateur directement vers le domaine de l'attaquant. cside surveille la couche navigateur, si bien que l'écouteur injecté et la balise sortante sont détectés là où ils s'exécutent réellement.

1. Introduire du code dans la page. L'attaquant place du JavaScript sur la page cible, presque toujours à l'insu du propriétaire du site. La voie la plus courante consiste à compromettre un script tiers, une balise d'analyse, un widget de chat, un outil de test A/B ou une bibliothèque de paiement, de sorte que le skimmer arrive intégré dans du code auquel le site fait déjà confiance et qu'il charge à chaque passage en caisse.

2. S'accrocher aux champs de formulaire. Une fois le script chargé, il attache des écouteurs d'événements au formulaire de paiement ou de connexion. Un écouteur sur l'événement input se déclenche à chaque frappe ; un sur l'événement submit se déclenche lorsque l'utilisateur clique sur payer. Le script peut également lire directement les valeurs depuis le DOM une fois que les champs sont remplis.

3. Copier les données. L'écouteur capture les valeurs des champs, numéro de carte, expiration, CVV, adresse de facturation, exactement telles que l'utilisateur les a saisies. Le formulaire lui-même n'est pas modifié. La transaction de l'utilisateur passe toujours par le processeur de paiement légitime.

4. Exfiltrer. Les données volées sont encodées et envoyées vers un domaine contrôlé par l'attaquant, souvent déguisées en ping d'analyse ou en requête d'image pour se fondre dans le trafic sortant normal de la page. La plupart des en-têtes Content Security Policy ne bloquent pas cela parce que l'attaquant utilise soit un domaine déjà autorisé par la politique, soit exploite une lacune existante.

Comment les attaquants introduisent-ils du code de formjacking sur votre site

Le formjacking ne nécessite pas de violation directe de vos serveurs. Les trois voies de livraison les plus courantes :

Where formjacking hits

Compromission de script tiers. La plupart des pages de paiement et d'e-commerce chargent entre 20 et 60 scripts tiers, plateformes d'analyse, outils de chat, gestionnaires de balises, bibliothèques de paiement, widgets de fournisseurs marketing. Chacun de ces fournisseurs représente une surface d'attaque. Si l'attaquant compromet l'infrastructure ou le CDN du fournisseur, chaque site chargeant ce script reçoit le skimmer. La violation de British Airways en 2018 a mis en danger les données personnelles de 429 612 clients après modification du JavaScript dans le flux de paiement de la compagnie aérienne. Des chercheurs ont lié l'attaque à des acteurs Magecart utilisant un script de fournisseur tiers compromis, et non une violation directe des serveurs de British Airways. (Wikipedia : Violation de données British Airways)

Domaines expirés ou détournés. Les sites chargent parfois des scripts depuis des domaines tiers qui ont depuis expiré ou changé de propriétaire. Un attaquant qui enregistre ce domaine peut alors servir n'importe quel JavaScript aux sites chargeant toujours l'ancienne balise de script. Comme l'URL n'a pas changé et que le domaine servait auparavant du code légitime, aucune vérification automatique ne l'identifie immédiatement.

Injection de code directe. Si l'attaquant exploite une vulnérabilité dans le CMS, le panneau d'administration ou un plugin du site, il peut injecter le script de formjacking directement dans les fichiers du site. Cette voie nécessite plus d'accès mais ne laisse aucune dépendance externe à tracer.

Ce que le formjacking cible

Les attaquants privilégient les pages qui collectent des données de grande valeur avec un minimum de friction :

Type de pageDonnées généralement capturées
Paiement e-commerceNuméro de carte, expiration, CVV, adresse de facturation
Inscription de compteE-mail, mot de passe, nom, adresse postale
Pages de connexionNom d'utilisateur et mot de passe
Formulaires de santéNuméro d'assurance, date de naissance, informations médicales
Demandes de compte financierNIF, revenus, coordonnées bancaires

Les pages de paiement sont la cible principale car les données de cartes ont un marché de revente immédiat. Les identifiants de connexion sont la deuxième priorité car ils permettent la prise de contrôle de comptes sur des plateformes avec des méthodes de paiement enregistrées.

Pourquoi les outils de sécurité traditionnels manquent le formjacking

Les pare-feux d'application web protègent le trafic atteignant votre serveur. Les données du formjacking quittent le navigateur directement vers un domaine de l'attaquant, le WAF ne les voit jamais.

Les scanners côté serveur inspectent le code au repos sur votre origine. Un script tiers compromis se charge depuis le CDN d'un fournisseur au moment de l'exécution, il n'est donc jamais sur votre serveur pour être analysé.

Les révisions manuelles périodiques vérifient les scripts listés dans votre gestionnaire de balises ou votre dépôt de code. Un skimmer injecté dans un script tiers entre les cycles de révision est invisible jusqu'à ce que quelqu'un effectue le prochain audit, souvent des semaines plus tard.

La Subresource Integrity (SRI) protège les scripts dont vous calculez le hash au moment du déploiement. Elle ne peut pas protéger les scripts chargés depuis des CDN contrôlés par des fournisseurs où l'attaquant a un accès en écriture, ni les scripts générés dynamiquement par requête.

Les exigences 6.4.3 et 11.6.1 de PCI DSS 4.0.1 existent parce que l'industrie a reconnu cette lacune. L'inventaire des scripts et la surveillance continue des altérations sur les pages de paiement sont devenus obligatoires le 1er avril 2025. (PCI Security Standards Council)

Les skimmers contournent aussi activement les scanners. La plupart vérifient navigator.webdriver, qui retourne true dans les navigateurs headless automatisés, et servent du code propre aux outils de sécurité tout en exécutant le skimmer complet pour les vrais utilisateurs.

Comment détecter le formjacking

Détecter le formjacking nécessite une visibilité sur ce que JavaScript fait au moment de l'exécution dans les navigateurs des vrais visiteurs. Les signaux spécifiques à surveiller :

  • Scripts nouveaux ou modifiés sur les pages sensibles. Un script absent la veille, ou dont le contenu a changé en dehors d'une fenêtre de déploiement planifiée, est le premier indicateur.
  • Écouteurs d'événements inattendus sur les champs de formulaire. Le code légitime attache des écouteurs submit pour traiter les formulaires. Un écouteur sur les événements input, keydown ou keyup sur des champs de paiement ou d'identifiants, ajouté par un script tiers, est une signature caractéristique du formjacking.
  • Données sortantes vers des domaines non listés. Toute requête réseau depuis une page de paiement vers un domaine ne figurant pas sur votre liste autorisée approuvée justifie une investigation immédiate.
  • Charges utiles encodées dans les requêtes sortantes. Les formjackers encodent les données volées, souvent en base64, avant de les envoyer. Une balise contenant un paramètre encodé inhabituellement long qui ne correspond à aucun événement d'analyse connu est un signal d'alarme.

La contrainte clé est que seule la surveillance à l'intérieur du navigateur peut voir ces signaux en conditions réelles. Les scanners opérant depuis l'extérieur manquent le formjacking qui se dissimule aux utilisateurs réels.

Comment prévenir le formjacking

Aucun contrôle unique n'élimine toutes les voies de formjacking. Combiner plusieurs contrôles réduit significativement la surface d'attaque :

  1. Inventorier chaque script sur les pages sensibles. Connaître chaque script propriétaire et tiers chargé sur les pages de paiement et de connexion, qui l'a autorisé et pourquoi il est là. Les scripts non reconnus ne doivent pas se charger.

  2. Surveiller les changements en continu. Un script qui change entre les cycles d'audit est une violation non détectée. La surveillance continue des altérations, obligatoire en vertu de l'exigence 11.6.1 de PCI DSS 4.0.1, détecte les changements en minutes plutôt qu'en semaines.

  3. Appliquer la SRI là où c'est pratique. Pour les scripts que vous contrôlez totalement et versionnez vous-même, les hashes SRI vérifient que le script n'a pas changé depuis le déploiement. La SRI ne fonctionne pas pour les scripts tiers mis à jour fréquemment ou générés dynamiquement par requête.

  4. Configurer la Content Security Policy de manière restrictive. Une CSP stricte limite les domaines vers lesquels les scripts peuvent envoyer des données, réduisant les destinations d'exfiltration d'un skimmer. En pratique, les pages de paiement ont souvent besoin d'autoriser de nombreux domaines pour l'analyse légitime et les fonctionnalités de paiement, ce qui rend un blocage complet difficile.

  5. Déployer une surveillance client-side des vrais visiteurs. La défense la plus directe est une surveillance qui observe ce que chaque script fait dans de vrais navigateurs, non un scanner exécutant des requêtes synthétiques depuis l'extérieur. C'est l'approche de cside.

Comment cside détecte le formjacking dans les vrais navigateurs

cside se déploie sous la forme d'un unique snippet JavaScript propriétaire qui surveille le comportement des scripts dans les navigateurs des vrais visiteurs, pas un robot d'exploration ou un scanner opérant depuis l'extérieur.

Pour le formjacking, cside détecte :

  • Les écouteurs d'événements attachés aux champs de formulaire par des scripts tiers, avec une attention particulière aux écouteurs qui se déclenchent sur les frappes plutôt que sur la soumission du formulaire
  • Les requêtes de données sortantes vers des domaines ne figurant pas sur la liste autorisée approuvée du site
  • Les nouveaux scripts apparaissant sur les pages de paiement ou de connexion en dehors d'une fenêtre de déploiement
  • Les modifications de scripts existants, y compris les modifications au moment de l'exécution dans la sortie chargée d'une balise fournisseur

Comme cside opère au niveau du navigateur aux côtés de l'attaque, il détecte le skimmer au moment où il se déclenche, avant que les données n'aient déjà été exfiltrées. Pour les organisations soumises à PCI DSS 4.0.1, PCI Shield mappe cette surveillance aux exigences 6.4.3 (inventaire et autorisation des scripts) et 11.6.1 (détection des altérations), générant des rapports prêts pour le QSA en continu.

Pour le contexte sur la relation entre le formjacking et le vaste écosystème du skimming numérique et les groupes de menace Magecart, consultez le guide complémentaire : Formjacking vs Magecart vs skimming numérique.

Réservez une démo pour voir ce que cside trouve sur vos pages de paiement, ou en savoir plus sur la prévention du e-skimming.

Formjacking flagged in a live session

Lectures associées

Simon Wijckmans
Founder & CEO

Founder and CEO of cside. Previously a product manager on Cloudflare Page Shield (now Cloudflare Client-Side Security). Co-chair of the W3C Anti-Fraud Community Group and a Forbes 30 Under 30 honoree. Building accessible security against client-side attacks, web security is not an enterprise-only problem.

FAQ

Frequently Asked Questions

Le formjacking est une attaque côté client dans laquelle un JavaScript malveillant intercepte les données saisies dans des formulaires web, champs de carte de paiement, identifiants de connexion, informations personnelles, et envoie une copie vers un serveur contrôlé par l'attaquant avant ou au moment de la soumission du formulaire. Le formulaire légitime continue de fonctionner normalement, de sorte que ni le propriétaire du site ni l'utilisateur ne savent que des données ont été volées.

Les trois voies les plus courantes sont : (1) compromettre un script tiers chargé par le site, une balise d'analyse, un widget de chat, un outil de test A/B ou une bibliothèque de paiement, pour que le skimmer se greffe sur du code de confiance ; (2) exploiter une vulnérabilité dans le CMS ou le code du site pour injecter le script directement ; et (3) détourner un domaine expiré ou abandonné qui sert toujours un script auquel le site cible fait confiance. Comme le skimmer arrive via un canal de confiance, il contourne les vérifications d'intégrité que le propriétaire du site n'a jamais pensé appliquer à un fournisseur sur lequel il s'appuie.

La cible principale est constituée par les données de carte de paiement sur les pages de paiement : numéro de carte, date d'expiration et CVV. Les attaquants de formjacking récupèrent également les identifiants de connexion sur les formulaires de connexion, les informations personnelles identifiables saisies lors de la création de compte et les données de santé ou financières collectées dans des formulaires spécialisés. Tout formulaire gérant des données sensibles est une cible potentielle.

Un pare-feu d'application web se positionne entre internet et votre serveur, inspectant les requêtes entrantes vers votre origine. Le formjacking s'exécute entièrement dans le navigateur du visiteur, une fois que le serveur a déjà livré la page. Le script malveillant lit les données du formulaire et les envoie directement vers un domaine de l'attaquant, une connexion sortante distincte qui ne passe jamais par le WAF. Les contrôles côté serveur n'ont aucune visibilité sur ce que fait JavaScript au moment de l'exécution dans le navigateur.

La plupart des attaques de formjacking passent inaperçues pendant des semaines voire des mois. La transaction se déroule normalement, aucune erreur visible n'apparaît et les journaux serveur ne montrent rien d'inhabituel. Les attaquants conçoivent les skimmers pour contrôler leur propre exécution, fonctionnant uniquement sur les chemins de paiement, se cachant des scanners automatisés en vérifiant les signaux de navigateurs headless, et exfiltrant les données dans des requêtes qui ressemblent à des balises d'analyse ordinaires. Les victimes découvrent généralement la violation via une alerte de fraude du réseau de cartes, la divulgation d'un chercheur en sécurité ou une réclamation d'un client.

Oui. Les exigences 6.4.3 et 11.6.1 de PCI DSS 4.0.1, devenues obligatoires le 1er avril 2025, ont été introduites spécifiquement pour traiter les attaques de skimming côté client, notamment le formjacking. L'exigence 6.4.3 impose un inventaire et une autorisation de tous les scripts sur les pages de paiement ; la 11.6.1 exige une surveillance continue et des alertes sur les modifications non autorisées des scripts des pages de paiement et des en-têtes HTTP. Ensemble, elles poussent les organisations vers une surveillance client-side continue plutôt que des révisions périodiques.

cside se déploie sous la forme d'un unique snippet JavaScript propriétaire qui surveille tous les scripts s'exécutant dans les navigateurs des vrais visiteurs sur les pages de paiement et de connexion. Il détecte le formjacking en suivant les écouteurs d'événements inattendus attachés aux champs de formulaire, en surveillant les données envoyées vers des domaines hors de votre liste autorisée, en alertant sur les scripts nouveaux ou modifiés et en identifiant des schémas comportementaux, comme un script lisant les valeurs des champs à chaque frappe plutôt qu'à la soumission, qui sont des signatures d'un skimmer. Comme il s'exécute dans le navigateur aux côtés de l'attaque, il la détecte au moment où elle se produit.

Surveillez et sécurisez vos scripts tiers

Gain full visibility and control over every script delivered to your users to enhance site security and performance.

Commencez gratuitement, ou essayez Business avec un essai de 14 jours.

cside Interface du tableau de bord affichant la surveillance des scripts et les analyses de sécurité
Related Articles
Réserver une démonstration