Le blog

Date : 1 février 2026
Catégorie : Sécurité
Boutique PrestaShop piratée : la procédure de nettoyage et remise en ligne

Une boutique PrestaShop piratée, c'est plus grave qu'un site vitrine : commandes clients, données bancaires, conformité PCI-DSS, réputation. L'attaquant vise l'argent. La réponse doit être chirurgicale et rapide.

Spécificités PrestaShop vs WordPress

Aspect WordPress PrestaShop
Vecteur principal Plugin nulled / mot de passe Module tiers / thème / permissions fichiers
Backdoor fréquente mu-plugins, functions.php override/, modules/, tools/smarty/compile
Données sensibles Contenu, utilisateurs Commandes, clients, CB (si stockées), adresses
Conformité RGPD RGPD + PCI-DSS (si CB stockées)
Nettoyage Remplacement core Remplacement core + override + modules + cache Smarty

Premières minutes : protocole urgence e-commerce

1. Maintenance immédiate (vraie, pas front-office)

# .htaccess racine
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^VOTRE\.IP\.ICI$
RewriteRule ^(.*)$ /maintenance.html [R=302,L]

Page maintenance.html : "Maintenance technique programmée. Vos commandes sont en sécurité. Retour sous peu." Pas de mention "piratage".

2. Changez TOUS les accès (ordre critique) :

  • Base de données : nouveau user + pass → maj app/config/parameters.php
  • Back-office : tous les employés admin + nouveau mot de passe (20+ car)
  • FTP/SFTP : nouveau pass + clés SSH
  • Hébergement / serveur : pass + 2FA
  • API paiement (Stripe, PayPal, Paybox, etc.) : révoquez les clés API, régénérez, mettez à jour dans le back-office
  • Webhooks paiement : vérifiez les URLs, régénérez les secrets
  • Cloudflare / CDN / WAF : token, règles, purge cache

3. Informez votre banque / PSP (si paiement direct) : signalez l'incident, demandez surveillance transactions suspectes.

Diagnostic : vecteurs PrestaShop

Outils (dans l'ordre) :

  1. grep -r "eval\|base64_decode\|gzinflate\|str_rot13\|create_function\|assert\|system\|exec\|shell_exec" . --include="*.php" --include="*.tpl" --include="*.js"
  2. find . -name "*.php" -mtime -7 -type f (modifiés 7 jours)
  3. find . -name "*.tpl" -mtime -7 -type f (templates modifiés)
  4. ls -la override/classes/ override/controllers/ modules/*/override/ (fichiers override suspects)
  5. ls -la tools/smarty/compile/ cache/ (fichiers compilés suspects)
  6. Back-office > Paramètres avancés > Performances : "Forcer la compilation" doit être NON en prod
  7. Base de données :
    • ps_employee : employés admin inconnus
    • ps_configuration : PS_SHOP_DOMAIN, PS_SHOP_DOMAIN_SSL, PS_SSL_ENABLED
    • ps_module : modules non installés mais présents dans modules/
    • ps_hook_module : hooks suspects
  8. Vérifiez modules/ : dossiers non officiels, fichiers .php à la racine du module
  9. tools/smarty/compile/ : vider complètement (cache Smarty = vecteur #1 réinfection)

Vecteurs PrestaShop les plus vus (nos stats) :

  • Module tiers abandonné / nulled : 41 %
  • Permissions fichiers trop larges (777 sur cache/, img/, modules/) : 24 %
  • Thème / override compromis : 18 %
  • Vulnérabilité core non patchée (1.6 / 1.7) : 12 %
  • Accès FTP/SSH compromis : 5 %

Nettoyage PrestaShop : méthode par couches

Couche 1 : Core PrestaShop

  1. Sauvegarde BD complète (mysqldump)
  2. Identifiez version exacte : cat config/defines.inc.php | grep _PS_VERSION_
  3. Téléchargez archive officielle même version (prestashop.com/download)
  4. Remplacez : admin/, classes/, controllers/, src/, vendor/, app/, index.php, init.php, config/defines.inc.php (gardez vos params DB), .htaccess (gardez vos règles perso)
  5. Ne touchez pas : app/config/parameters.php, img/, download/, mails/, themes/votre-theme/ (sauf si compromis), modules/ (voir couche 2), override/ (voir couche 3)

Couche 2 : Modules

  1. Listez modules installés : Back-office > Modules > Gestionnaire de modules
  2. Pour chaque module officiel : désinstallez, supprimez dossier modules/nom-module/, réinstallez depuis source officielle (même version)
  3. Pour chaque module tiers :
    • Source officielle dispo ? → même processus
    • Module nulled / abandonné / sans source → supprimez, remplacez par équivalent officiel
    • Module custom (développé pour vous) : audit code complet, recréez propre si doute
  4. Videz tools/smarty/compile/ et cache/ et var/cache/ (PrestaShop 1.7+)

Couche 3 : Override & Thème

  1. override/classes/ et override/controllers/ : supprimez tout, recréez seulement vos overrides légitimes (vérifiez chaque fichier)
  2. Thème : si thème acheté (ThemeForest, PrestaShop Addons) → réinstallez version propre. Si thème custom → audit chaque .tpl, .php, .js, .css. Cherchez eval, base64, include, require, $_GET, $_POST non sanitizés.
  3. Vérifiez themes/votre-theme/templates/ : pas de .php, que des .tpl

Couche 4 : Base de données

  1. ps_employee : gardez seulement vrais employés, nouveau mot de passe bcrypt pour tous
  2. ps_configuration : PS_SHOP_DOMAIN, PS_SHOP_DOMAIN_SSL (vos domaines), PS_SSL_ENABLED=1, PS_SSL_ENABLED_EVERYWHERE=1
  3. ps_customer : vérifiez pas de comptes admin créés par attaquant (rôle = 1 dans ps_customer_group)
  4. Nettoyez ps_connections (logs connexions), ps_guest (paniers abandonnés > 30 j)
  5. Cherchez injections : SELECT * FROM ps_cms_lang WHERE content LIKE '%<script>%' OR content LIKE '%eval(%' OR content LIKE '%base64%'; (pareil pour ps_product_lang, ps_category_lang, ps_cms_category_lang)

Couche 5 : Fichiers statiques & uploads

  1. img/ : cherchez .php, .phtml, .htaccess → supprimez
  2. download/ : même chose
  3. mails/ : vérifiez pas de fichiers ajoutés
  4. tools/smarty/compile/ vider entièrement
  5. cache/ vider entièrement
  6. var/cache/ (PS 1.7+) vider entièrement
  7. var/logs/ : archivez puis videz (garde trace pour analyse)

Remise en ligne + validation e-commerce

  1. app/config/parameters.php : nouveaux identifiants DB, nouvelle clé cookie_key (générez 56 car aléatoires)
  2. Videz tous les caches : cache/, var/cache/, tools/smarty/compile/, CDN (Cloudflare Purge Everything), Varnish/Redis si utilisé
  3. Back-office > Performances : "Forcer la compilation" = NON, "Cache" = OUI, "CCC" (CSS/JS/HTML) = OUI
  4. Tests critiques :
    • Home, catégorie, produit, panier, tunnel commande (étape par étape)
    • Paiement : commande test Stripe/PayPal/Paybox → vérifiez webhook reçu, statut commande OK
    • Emails : commande, inscription, mot de passe oublié, contact → reçus
    • HTTPS : certificat valide, HSTS, pas de contenu mixte (DevTools > Security)
    • robots.txt, sitemap.xml propres
    • Search Console : soumettre sitemap, inspection URL 10 pages
  5. Demandez révision Search Console si alerte "site piraté"

Durcissement PrestaShop (spécifique)

  • Permissions fichiers : find . -type f -exec chmod 644 {} \; ; find . -type d -exec chmod 755 {} \; ; chmod 775 -R img/ cache/ download/ mails/ tools/smarty/compile/ var/cache/ var/logs/ (selon config serveur)
  • Admin : URL personnalisée (pas /admin), IP whitelist si IP fixe, 2FA (module Google Authenticator natif PS 1.7+)
  • Mises à jour : Security Patch appliqué sous 24 h (module 1-Click Upgrade ou manuel)
  • Permissions modules : chmod 644 sur tous .php modules, 755 dossiers
  • WAF : Cloudflare (règles OWASP + rate limiting /admin + blocage pays à risque)
  • Sauvegardes : BD quotidienne externalisée + fichiers hebdo + test restauration mensuel
  • Monitoring : uptime + intégrité fichiers (script quotidien find /chemin/boutique -name "*.php" -mtime -1 + alerte email)
  • PCI-DSS : si CB stockées → audit annuel, scans trimestriels ASV, segmentation réseau

Cas spécifiques PrestaShop

Skimmer paiement (Magecart-like) :
Code JS injecté dans checkout.tpl ou payment.tpl ou via module tiers → vole numéros CB. Cherchez dans : themes/votre-theme/templates/checkout/, modules/*/views/templates/hook/, override/controllers/front/PaymentModule.php. Vérifiez aussi Google Tag Manager / GTM si utilisé (injecteur tiers).

Back-office inaccessible :
Via FTP : renommez modules/modules_off/ → accédez au BO. Réactivez modules un par un.
Via BD : UPDATE ps_employee SET passwd = '$2y$10$...' WHERE email = 'votre@email.com'; (hash bcrypt généré via php -r "echo password_hash('nouveau_mdp', PASSWORD_BCRYPT);")

Redirection vers spam :
Cherchez dans : index.php racine, .htaccess, config/defines.inc.php, override/classes/controller/FrontController.php, modules/*/nom_module.php (fonction hookHeader ou hookDisplayHeader).

Alerte hébergeur / suspension :
Demandez liste fichiers détectés. Nettoyez en local, renvoyez propre, demandez réactivation.

Conformité post-incident (RGPD + PCI-DSS)

  • RGPD : Notifiez CNIL sous 72 h si données clients compromises (nom, email, adresse, historique commandes). Modèle notification sur cnil.fr.
  • PCI-DSS : Si CB stockées/transitées → notifiez votre acquéreur/bank, demandez scan ASV, réévaluez votre niveau de conformité (SAQ A-EP ou D).
  • Clients : Email transparent : ce qui s'est passé, quelles données, quoi faire (changer mdp, surveiller CB). Modèle sur cnil.fr.

Coûts & délais (notre grille PrestaShop)

Niveau Temps Coût HT Inclus
Simple (1 module compromis) 4-6 h 350 € Nettoyage + durcissement + test paiement
Moyen (override + module + skimmer) 8-12 h 650 € + audit modules + test tunnel complet
Complexe (BD + skimmer + multiples backdoors) 16-24 h 1 200 € + conformité PCI-DSS + scan ASV + rapport CNIL

Notre intervention : diagnostic sous 2 h, remise en ligne jour même si possible, test tunnel commande complet, monitoring 3 mois. Urgence PrestaShop.


Votre boutique est compromise ? On intervient aujourd'hui. Diagnostic sous 2 h, nettoyage, test tunnel paiement, remise en ligne. Urgence PrestaShop — 06 02 55 17 36.