Le nom de ma boutique affiche du texte que je n’ai pas écrit
Un fragment de code apparaît dans le pied de page, dans l’onglet du navigateur ou dans les e-mails de commande : la valeur de configuration qui porte le nom de la boutique a été modifiée directement en base de données, et elle sert de véhicule.
Un bug d’affichage qui n’en est pas un
Le symptôme est presque toujours décrit de la même façon : « il y a du charabia dans le pied de page », « l’onglet du navigateur affiche du code », « le nom de ma boutique est cassé dans les e-mails de commande ». Le réflexe habituel est de chercher une mauvaise traduction, un thème mal configuré, un caractère parti de travers pendant un import. Ce n’est presque jamais cela.
Le nom de la boutique n’est pas un texte du thème. C’est une valeur de configuration stockée en base de données, sous la clé PS_SHOP_NAME. La boutique la relit et la réaffiche à des dizaines d’endroits : en-tête, pied de page, titre de la page dans l’onglet du navigateur, e-mails transactionnels, factures, notifications internes. Une seule ligne en base, servie partout, et pas toujours traitée de la même manière selon l’endroit où elle réapparaît.
C’est ce qui en fait une cible utile pour un attaquant. Il n’a pas besoin de modifier un fichier du thème, ni de toucher au tunnel de commande, ni de laisser un fichier sur le serveur. Il écrit une fois dans une valeur de configuration, et son contenu est ensuite servi sur toutes les pages, à tous les visiteurs, y compris ceux qui sont en train de payer. Le texte bizarre que vous voyez dans le pied de page n’est pas le problème : c’est la partie visible d’une chaîne dont le reste est silencieux.
Ce qui doit vous alerter
- Un fragment de balise ou de code visible dans le pied de page, là où le nom de la boutique s’affiche normalement.
- Le titre de l’onglet du navigateur qui contient un texte que vous n’avez jamais saisi.
- Le nom de la boutique déformé dans les e-mails de confirmation de commande ou sur les factures.
- Un champ « Nom de la boutique » qui paraît normal dans le back-office alors que le site public affiche autre chose.
- Un script que vous ne reconnaissez pas dans le code source des pages, y compris sur le tunnel de commande.
- Des clients qui signalent qu’on leur a demandé deux fois leurs informations de paiement.
Ce que PrestaShop a documenté en janvier 2025
Le 22 janvier 2025, PrestaShop a publié une alerte officielle sur une vague d’attaques exploitant des failles d’injection SQL présentes dans des modules tiers, et non dans le cœur. Le mode opératoire décrit est exactement celui-ci : les attaquants insèrent du contenu malveillant dans la valeur de configuration PS_SHOP_NAME stockée en base ; cette valeur sert ensuite à charger du JavaScript non autorisé qui capture les saisies des clients. La vérification recommandée par PrestaShop est simple à énoncer : chercher un script ou un contenu inattendu dans la valeur PS_SHOP_NAME, en base de données.
Ce JavaScript n’est pas là pour dégrader l’affichage. Il est là pour lire ce que vos clients tapent dans le tunnel de commande : coordonnées, adresse, informations de paiement. Dans les campagnes les plus abouties, la surcouche est soignée : un faux formulaire de paiement s’affiche d’abord, le client saisit sa carte, puis le vrai formulaire lui redemande les mêmes informations. La plupart des clients acceptent cette double saisie et terminent leur commande sans se douter que les données ont déjà été volées. C’est pour cela que ce symptôme ne peut pas être traité comme un défaut cosmétique.
Côté correctifs, PrestaShop a publié une version corrigée du module officiel ps_contactinfo, la 3.3.3, compatible PrestaShop 1.7.2 et plus, avec l’avis GitHub GHSA-35pq-7pv2-2rfw. Les recommandations officielles ne s’arrêtent pas là : mettre à jour l’ensemble des modules natifs et tiers, utiliser un préfixe de base de données personnalisé plutôt que le préfixe par défaut, déployer un pare-feu applicatif, faire des sauvegardes régulières et suivre les avis de sécurité PrestaShop.
SELECT name, value FROM ps_configuration WHERE name = 'PS_SHOP_NAME';
Pourquoi lire la valeur en base et pas seulement dans le back-office
La requête ci-dessus est une lecture, elle ne modifie rien. Le préfixe ps_ doit être remplacé par celui de votre installation : si vous avez suivi la recommandation d’un préfixe personnalisé, le nom de la table est différent chez vous.
Pourquoi passer par la base plutôt que par le champ du back-office ? Parce que le back-office affiche la valeur dans un formulaire, et qu’un formulaire échappe, tronque ou masque une partie de ce qu’il reçoit. Une valeur qui paraît normale dans un champ de saisie peut contenir bien autre chose une fois servie dans une page. La lecture en base vous donne la valeur brute, celle qui est réellement enregistrée, sans intermédiaire d’affichage. C’est la seule vérification qui tranche.
Le préfixe par défaut joue un rôle direct dans ce scénario. Une écriture qui vise une table doit connaître son nom. Avec le préfixe standard, ce nom est identique sur des centaines de milliers de boutiques : il n’y a rien à deviner, et une attaque écrite une fois s’applique partout sans adaptation. Changer le préfixe ne corrige aucune faille, ce n’est pas une protection en soi ; c’est ce que PrestaShop recommande précisément parce que cela supprime une facilité gratuite offerte aux attaques automatisées.
Ce que je fais dans cet ordre
-
Lire la valeur brute en base
Avec la requête de lecture ci-dessus, adaptée à votre préfixe. Vous cherchez la présence d’un script ou d’un contenu inattendu dans la valeur, pas seulement un nom mal orthographié.
-
Comparer avec ce que sert réellement la page publique
Affichez le code source d’une page du site et regardez les endroits où le nom de la boutique est réaffiché : en-tête, pied de page, titre du document. Un écart entre la base et la page indique où la valeur est réinterprétée.
-
Vérifier les fichiers du thème
La valeur de configuration n’est pas le seul véhicule possible. Des balises de script peuvent aussi être injectées directement dans les fichiers du thème, en particulier dans les gabarits chargés sur toutes les pages. Comparez le thème avec une copie saine.
-
Corriger la valeur, puis chercher l’écriture
Rétablir un nom de boutique propre fait disparaître le symptôme en quelques minutes. Cela ne dit rien sur la façon dont la valeur a été écrite. Tant que le module qui a permis cette écriture est en place, la valeur peut être réécrite.
-
Mettre à jour l’ensemble des modules
C’est la première recommandation officielle : les modules natifs comme les modules tiers. Le module officiel ps_contactinfo dispose d’une version corrigée en 3.3.3, compatible PrestaShop 1.7.2 et plus.
-
Traiter l’incident comme une possible violation de données
Si du JavaScript non autorisé a été servi sur le tunnel de commande, des données clients ont pu être capturées. Cela relève des obligations de notification, et cela se documente : dates, pages concernées, durée d’exposition.
Pour aller plus loin
-
Injections SQL expliquées
Le mécanisme qui permet d’écrire dans une table de configuration depuis l’extérieur.
-
Vérifier si mon site est compromis
Les autres endroits à contrôler quand une valeur en base a été modifiée.
-
Nettoyer un site infecté
Ce qu’il faut retirer, et dans quel ordre, une fois la source identifiée.
-
Base de données
Ce que contient la base d’une boutique et pourquoi la configuration y est stockée.
Décrivez votre besoin en 1 minute
Quelques questions ciblées pour que je vous réponde avec une estimation, pas avec un questionnaire de plus.