La sécurité d'une boutique Prestashop est cruciale pour protéger vos données, celles de vos clients et maintenir la confiance de votre audience. Ce guide vous présente les meilleures pratiques pour sécuriser votre e-commerce contre les menaces les plus courantes.
1. Maintenir Prestashop et ses modules à jour
La première ligne de défense contre les attaques est de maintenir votre installation Prestashop et tous vos modules à jour. Les mises à jour corrigent régulièrement des vulnérabilités de sécurité.
- Activez les notifications de mise à jour dans le back-office
- Testez les mises à jour sur un environnement de staging avant la production
- Désinstallez les modules non utilisés
- Utilisez uniquement des modules de sources fiables (Addons officiel, développeurs reconnus)
- Vérifiez régulièrement les CVE Prestashop sur le site officiel
2. Sécuriser l'accès au back-office
Le back-office est la cible privilégiée des attaquants. Plusieurs mesures simples peuvent considérablement augmenter sa sécurité.
Modifier l'URL du back-office
Changez le dossier par défaut /admin vers quelque chose d'unique et difficile à deviner.
# Renommer le dossier admin
mv /var/www/html/admin /var/www/html/admin-secure-xyz123
# Mettre à jour le fichier .htaccess si nécessaire
Implémenter l'authentification à deux facteurs (2FA)
Installez un module d'authentification à deux facteurs pour ajouter une couche de sécurité supplémentaire.
Limiter les tentatives de connexion
Utilisez un module anti-bruteforce ou configurez fail2ban pour bloquer les IP après plusieurs tentatives échouées.
# Exemple de configuration fail2ban pour Prestashop
[prestashop-admin]
enabled = true
port = http,https
filter = prestashop-admin
logpath = /var/log/apache2/access.log
maxretry = 3
bantime = 3600
3. Protéger contre les injections SQL
Les injections SQL restent l'une des vulnérabilités les plus dangereuses. Prestashop offre des outils pour s'en protéger.
Toujours utiliser DbQuery
N'écrivez jamais de requêtes SQL brutes. Utilisez toujours la classe DbQuery qui échappe automatiquement les valeurs.
<?php
// ❌ MAUVAIS - Vulnérable aux injections SQL
$id = $_GET['id'];
$sql = "SELECT * FROM " . _DB_PREFIX_ . "product WHERE id_product = $id";
// ✅ BON - Sécurisé avec DbQuery
$query = new DbQuery();
$query->select('*')
->from('product')
->where('id_product = ' . (int)Tools::getValue('id'));
$result = Db::getInstance()->getRow($query);
Valider et typer les entrées
Castez toujours les variables en leur type attendu avant de les utiliser dans des requêtes.
<?php
$idProduct = (int)Tools::getValue('id_product');
$email = pSQL(Tools::getValue('email'));
$isActive = (bool)Tools::getValue('active');
4. Prévenir les attaques XSS (Cross-Site Scripting)
Les attaques XSS permettent d'injecter du code JavaScript malveillant. Prestashop fournit des méthodes pour échapper les sorties.
<?php
// Dans vos templates Smarty
{$variable|escape:'html':'UTF-8'}
{$variable|escape:'javascript':'UTF-8'}
// Dans votre code PHP
echo Tools::safeOutput($userInput);
echo htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
Configuration des en-têtes de sécurité
Ajoutez des en-têtes HTTP pour protéger contre les attaques XSS et autres menaces.
# Dans .htaccess
<IfModule mod_headers.c>
Header set X-Content-Type-Options "nosniff"
Header set X-Frame-Options "SAMEORIGIN"
Header set X-XSS-Protection "1; mode=block"
Header set Content-Security-Policy "default-src 'self'"
Header set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>
5. Sécuriser les fichiers et permissions
Des permissions de fichiers incorrectes peuvent permettre à un attaquant de modifier des fichiers critiques.
Permissions recommandées
# Dossiers : 755
find /var/www/html/ -type d -exec chmod 755 {} \;
# Fichiers : 644
find /var/www/html/ -type f -exec chmod 644 {} \;
# Fichiers de configuration sensibles : 640
chmod 640 /var/www/html/config/settings.inc.php
chmod 640 /var/www/html/app/config/parameters.php
Protéger les fichiers sensibles
# Dans .htaccess
<FilesMatch "\.(htaccess|htpasswd|ini|log|sql|conf)$">
Order Allow,Deny
Deny from all
</FilesMatch>
# Bloquer l'accès aux fichiers de configuration
<Files "settings.inc.php">
Order Allow,Deny
Deny from all
</Files>
6. Sécuriser la base de données
La base de données contient toutes les informations sensibles de votre boutique. Sa protection est essentielle.
- Utilisez un préfixe de table unique plutôt que le
ps_par défaut - Créez un utilisateur MySQL dédié avec les permissions minimales nécessaires
- Utilisez des mots de passe forts pour l'utilisateur de base de données
- Désactivez l'accès distant à MySQL si non nécessaire
- Effectuez des sauvegardes régulières et automatisées
-- Créer un utilisateur avec permissions limitées
CREATE USER 'prestashop_user'@'localhost' IDENTIFIED BY 'mot_de_passe_fort';
GRANT SELECT, INSERT, UPDATE, DELETE ON prestashop_db.* TO 'prestashop_user'@'localhost';
FLUSH PRIVILEGES;
7. Implémenter HTTPS et SSL
Le protocole HTTPS chiffre les communications entre le navigateur et le serveur. Il est aujourd'hui indispensable.
- Obtenez un certificat SSL (gratuit avec Let's Encrypt)
- Forcez l'utilisation de HTTPS pour tout le site
- Activez HSTS (HTTP Strict Transport Security)
- Configurez la redirection HTTP vers HTTPS
# Forcer HTTPS dans .htaccess
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Activer HSTS
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
8. Protéger contre les attaques CSRF
Prestashop intègre une protection CSRF via des tokens. Utilisez-les systématiquement dans vos formulaires et actions sensibles.
<?php
// Dans vos contrôleurs
if (!Tools::isSubmit('token') || Tools::getValue('token') !== Tools::getToken()) {
die('Token invalide');
}
// Dans vos templates Smarty
<input type="hidden" name="token" value="{$token}">
// Générer un token
$token = Tools::getToken();
9. Surveiller et auditer
La détection précoce d'une attaque peut limiter considérablement les dégâts.
Mise en place de logs
<?php
// Logger les actions sensibles
PrestaShopLogger::addLog(
'Tentative de connexion échouée pour : ' . Tools::getValue('email'),
3, // Niveau Warning
null,
'Customer',
null,
true
);
Outils de monitoring
- Installez un module de détection d'intrusion
- Configurez des alertes pour les actions suspectes
- Utilisez des outils comme ModSecurity pour le WAF (Web Application Firewall)
- Surveillez les logs Apache/Nginx régulièrement
- Vérifiez l'intégrité des fichiers avec des outils comme AIDE ou Tripwire
10. Sauvegardes et plan de récupération
Même avec toutes les protections, une faille zéro-day peut compromettre votre boutique. Ayez toujours un plan B.
- Automatisez les sauvegardes quotidiennes de la base de données et des fichiers
- Stockez les sauvegardes sur un serveur distant
- Testez régulièrement la restauration de vos sauvegardes
- Documentez votre procédure de récupération d'urgence
- Gardez une copie offline des sauvegardes critiques
#!/bin/bash
# Script de sauvegarde automatisé
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups/prestashop"
# Sauvegarde base de données
mysqldump -u user -p'password' prestashop_db | gzip > $BACKUP_DIR/db_$DATE.sql.gz
# Sauvegarde fichiers
tar -czf $BACKUP_DIR/files_$DATE.tar.gz /var/www/html/
# Supprimer les sauvegardes de plus de 30 jours
find $BACKUP_DIR -type f -mtime +30 -delete
Checklist de sécurité Prestashop
Utilisez cette checklist pour auditer régulièrement votre boutique :
- ☑️ Prestashop et modules sont à jour
- ☑️ URL du back-office personnalisée
- ☑️ Authentification à deux facteurs active
- ☑️ HTTPS forcé sur tout le site
- ☑️ Permissions fichiers correctement configurées
- ☑️ Préfixe de table personnalisé
- ☑️ DbQuery utilisé pour toutes les requêtes
- ☑️ Échappement systématique des sorties utilisateur
- ☑️ En-têtes de sécurité HTTP configurés
- ☑️ Sauvegardes automatisées et testées
- ☑️ Logs et monitoring actifs
- ☑️ Modules inutilisés désinstallés
Conclusion
La sécurité d'une boutique Prestashop n'est pas une tâche ponctuelle mais un processus continu. En appliquant ces bonnes pratiques et en restant vigilant face aux nouvelles menaces, vous réduisez considérablement les risques de compromission.
N'oubliez pas que la sécurité à 100% n'existe pas, mais une approche en couches (defense in depth) rend les attaques beaucoup plus difficiles et coûteuses pour les pirates.
Besoin d'un audit de sécurité ou d'aide pour sécuriser votre boutique Prestashop ? Contactez-moi pour protéger votre e-commerce !