Votre site Drupal tourne en production depuis plusieurs années. Les équipes techniques gèrent les mises à jour, le pare-feu est en place, et pourtant une question revient régulièrement dans les comités IT : est-ce qu'on est vraiment protégés ?
En 2026, la sécurité d'un CMS d'entreprise ne se réduit plus à "appliquer les patches". Les attaques ciblant les CMS open source se sont sophistiquées : injection de dépendances, exploitation de modules tiers non maintenus, attaques sur les API headless, exfiltration silencieuse de données. Et Drupal, malgré sa réputation de CMS le plus sécurisé du marché, n'est pas immunisé.
Ce guide s'adresse aux DSI et responsables IT qui pilotent un site Drupal en production et doivent répondre à une question simple : que faut-il faire, dans quel ordre, pour avoir un niveau de sécurité réellement professionnel ?
Il couvre les mises à jour de sécurité, les modules incontournables, la configuration du WAF, HTTPS/TLS, et se termine par une checklist d'audit actionnable que vous pouvez utiliser dès cette semaine.
Pourquoi la sécurité Drupal mérite une attention spécifique en 2026
Drupal est le CMS de référence pour les sites institutionnels, les portails B2B et les applications web critiques. Cette exposition en fait une cible de choix.
Le contexte des menaces en 2026
Trois tendances aggravent le risque en 2026 :
1. L'automatisation des attaques. Les bots scannent en permanence l'ensemble d'internet à la recherche de sites exposant des versions vulnérables de Drupal. Le délai entre la publication d'une CVE et les premières tentatives d'exploitation est passé sous les 48 heures pour les failles critiques.
2. La surface d'attaque des modules contrib. Drupal.org recense plus de 50 000 modules contributifs. Tous ne reçoivent pas le même niveau de maintenance. Un module abandonné mais toujours installé sur votre site est une porte d'entrée potentielle — même si Drupal core est parfaitement à jour.
3. L'essor des architectures headless. Si vous utilisez Drupal en mode découplé avec une API JSON:API ou GraphQL, la surface exposée est plus large et les règles de sécurité classiques ne suffisent plus.
Ce que la sécurité Drupal implique réellement
La sécurité Drupal repose sur quatre piliers :
- Les mises à jour (core + modules) appliquées rapidement
- La configuration du site et du serveur
- La supervision en temps réel
- L'audit régulier pour détecter ce qui a dérivé
La plupart des incidents surviennent non pas parce que Drupal est vulnérable, mais parce que l'un de ces quatre piliers a été négligé.
Pilier 1 : la gestion des mises à jour de sécurité
Comprendre le cycle des Security Advisories Drupal
L'équipe de sécurité Drupal publie ses advisories chaque mercredi (heure UTC). Chaque advisory est classé selon sa sévérité (Critical, Highly Critical, Moderately Critical, Less Critical, Not Critical) et son score CVSS.
Les advisories Critical ou Highly Critical sur Drupal core appellent une réaction dans les 24 à 72 heures. Les advisories sur les modules contrib doivent être traités en fonction de leur utilisation réelle sur votre site.
Pour ne rien manquer :
- Abonnez-vous au flux RSS :
https://www.drupal.org/security/rss.xml - Configurez une alerte Slack ou email sur ce flux
- Désignez un responsable de la veille sécurité dans votre équipe
La procédure de mise à jour en production
Une mise à jour de sécurité Drupal ne se fait pas en une commande Composer aveugle. Voici la procédure recommandée :
Étape 1 — Évaluation de l'advisory Lisez l'advisory complet sur drupal.org. Identifiez si votre site est concerné (module installé et activé ? version concernée ?). Si le module en question n'est pas installé, l'advisory ne vous concerne pas.
Étape 2 — Mise à jour en environnement de développement
composer update drupal/[module] --with-all-dependencies
Lancez votre suite de tests automatisés et vérifiez manuellement les fonctionnalités critiques.
Étape 3 — Déploiement en staging Répétez les tests en staging avec les données de production anonymisées. Vérifiez les logs d'erreur Drupal (/admin/reports/dblog ou vos logs serveur).
Étape 4 — Déploiement en production En mode maintenance, mettez à jour, videz les caches, vérifiez les logs. Planifiez ce déploiement en dehors des heures de pointe.
Étape 5 — Vérification post-déploiement Confirmez que la version à jour est bien en place :
drush pm:list --filter=drupal/[module]
Gestion des modules non maintenus
Un module avec le statut "Unsupported" ou "Abandoned" sur drupal.org doit être traité comme une vulnérabilité potentielle, même en l'absence d'advisory officiel.
Audit à réaliser : listez tous vos modules contrib et vérifiez leur statut sur drupal.org. Pour chaque module abandonné :
- Évaluez si son usage est critique
- Cherchez une alternative maintenue
- Si aucune alternative n'existe, envisagez de porter la maintenance en interne ou de contacter l'équipe DrupaLabs
Automatiser la veille avec Composer et Drush
# Lister les mises à jour disponibles (dont les updates de sécurité)
composer outdated drupal/*
# Via Drush
drush pm:security
La commande drush pm:security interroge le Security Advisory API de drupal.org et liste uniquement les mises à jour qui corrigent des vulnérabilités connues — c'est l'outil le plus ciblé pour la veille quotidienne.
Pilier 2 : les modules de sécurité incontournables
Security Review — l'audit automatisé continu
Le module Security Review (drupal/security_review) exécute une série de vérifications automatisées sur la configuration de votre site. Il détecte les erreurs de configuration les plus courantes : permissions de fichiers incorrectes, droits utilisateur trop larges, configurations dangereuses de PHP, etc.
Installation :
composer require drupal/security_review
drush en security_review
Utilisation : Le rapport est accessible via /admin/reports/security-review. Chaque point de contrôle est classé en succès, échec ou avertissement, avec une explication et une recommandation.
Planifiez une vérification hebdomadaire et intégrez drush security-review dans votre pipeline CI/CD pour détecter les régressions de configuration lors de chaque déploiement.
Ce que Security Review vérifie :
- Accès aux fichiers de configuration (
settings.php,services.yml) - Rôles et permissions utilisateurs (rôles trop permissifs)
- Configuration de PHP (fonctions dangereuses autorisées)
- Trusted host settings
- Accès anonyme aux rapports d'erreur
- Modules de développement actifs en production (
devel,views_ui, etc.)
Paranoia — durcissement du backoffice
Le module Paranoia (drupal/paranoia) bloque les fonctionnalités de Drupal qui permettraient à un utilisateur malveillant (ou à un compte compromis) d'exécuter du code PHP arbitraire depuis l'interface d'administration.
Concrètement, il empêche :
- L'exécution de PHP dans les blocs, vues, ou champs texte
- L'utilisation de
php_eval()dans les templates - L'accès à certaines pages d'administration sensibles pour les rôles non administrateurs
composer require drupal/paranoia
drush en paranoia
Attention : Paranoia peut casser des fonctionnalités si votre site utilise PHP inline dans des vues ou des blocs. Testez d'abord en staging.
Shield — protection de l'environnement hors production
Le module Shield protège vos environnements de développement et staging par une authentification HTTP Basic. Indispensable pour éviter que vos environnements non-production soient indexés ou attaqués.
composer require drupal/shield
drush en shield
Configurez-le via settings.php pour qu'il s'active automatiquement sur tous les environnements hors production — et qu'il soit désactivé en production.
Autres modules à évaluer
| Module | Usage |
|---|---|
| Honeypot | Protection anti-spam sur les formulaires |
| Flood Control | Limite les tentatives de connexion échouées |
| Key | Gestion sécurisée des clés API et secrets |
| Encrypt | Chiffrement des données sensibles en base |
| Two-factor Authentication (TFA) | MFA pour les comptes administrateurs |
| Login Security | Blocage IP après N tentatives échouées |
| Permissions by Term | Contrôle d'accès granulaire au contenu |
Pilier 3 : la configuration du pare-feu applicatif (WAF)
Pourquoi un WAF spécifique à Drupal ?
Un pare-feu réseau (firewall) filtre le trafic au niveau IP et port. Un WAF (Web Application Firewall) analyse le contenu des requêtes HTTP pour bloquer les attaques applicatives : injections SQL, XSS, traversée de répertoire, exploitation de failles connues.
Pour un site Drupal en production, un WAF est incontournable, surtout si :
- Le site expose une API (JSON:API, REST, GraphQL)
- Le formulaire de connexion est accessible sans restriction d'IP
- Le site reçoit un trafic significatif
Options WAF pour Drupal
Option 1 — WAF au niveau CDN/proxy
Les solutions cloud (Cloudflare WAF, AWS WAF, Fastly) s'intercalent entre internet et votre serveur. Elles offrent des règles préconfigurées pour les CMS courants, dont Drupal, et bloquent les attaques avant qu'elles atteignent votre infrastructure.
Avantages : zéro configuration serveur, mises à jour des règles automatiques, protection DDoS incluse. Inconvénients : coût mensuel, le trafic transite par un tiers.
Option 2 — WAF serveur (ModSecurity + règles OWASP)
Si vous gérez votre propre infrastructure, ModSecurity avec le ruleset OWASP CRS offre une protection solide.
Configuration Apache :
SecRuleEngine On
Include /etc/modsecurity/crs/crs-setup.conf
Include /etc/modsecurity/crs/rules/*.conf
Configuration Nginx (via OpenResty ou proxy vers Apache avec ModSecurity) : plus complexe, mais réalisable.
Activez le mode DetectionOnly en premier pour logger sans bloquer, analysez les faux positifs, puis passez en mode On une fois le tuning effectué.
Option 3 — Module Drupal : Antibot
Le module Antibot (drupal/antibot) protège les formulaires Drupal sans CAPTCHA visible — il utilise du JavaScript côté client pour distinguer les bots des utilisateurs humains. Ce n'est pas un WAF complet, mais c'est une couche de protection efficace contre les bots qui ciblent les formulaires.
Configuration minimale recommandée pour le WAF
Quelles que soit la solution retenue, configurez a minima :
- Blocage des requêtes contenant des payloads d'injection SQL classiques
- Blocage des tentatives de traversée de répertoire (
../,..%2F) - Rate limiting sur
/user/login: maximum 10 tentatives / minute par IP - Blocage des User-Agents connus pour le scanning (Nmap, Nikto, sqlmap)
- Filtrage des requêtes vers
/xmlrpc.phpsi vous n'utilisez pas XML-RPC - Protection des chemins d'administration : accès à
/admin/*réservé aux IP de confiance si possible
Restriction d'accès au backoffice par IP
Si votre équipe d'administration travaille depuis des IP fixes ou un VPN, restreignez l'accès à /admin et /user à ces adresses.
Exemple Apache :
<Location /admin>
Require ip 203.0.113.0/24
Require ip 198.51.100.5
</Location>
C'est l'une des mesures les plus efficaces pour éliminer les tentatives de brute-force sur le backoffice.
Pilier 4 : HTTPS/TLS — configuration et bonnes pratiques
Pourquoi HTTPS ne suffit pas
HTTPS chiffre les communications entre le navigateur et le serveur. Mais un site HTTPS peut rester vulnérable si :
- Le certificat est expiré ou auto-signé
- Les protocoles TLS anciens (TLS 1.0, 1.1) sont encore acceptés
- Des suites de chiffrement faibles sont autorisées
- HSTS n'est pas configuré
En 2026, un site B2B sans configuration TLS correcte sera pénalisé dans les audits de conformité (ISO 27001, RGPD, NIS2) et dans les évaluations de risque des clients entreprise.
Configuration TLS recommandée en 2026
Protocoles autorisés : TLS 1.2 et TLS 1.3 uniquement. Désactivez TLS 1.0 et TLS 1.1.
Suites de chiffrement (TLS 1.2) :
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
Configuration Nginx :
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
HSTS (HTTP Strict Transport Security)
HSTS indique aux navigateurs qu'ils ne doivent jamais accéder au site en HTTP, même si l'utilisateur tape l'URL sans https://. C'est une protection contre les attaques de downgrade.
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
La directive preload permet d'inclure votre domaine dans la liste HSTS preloaded des navigateurs — une protection supplémentaire dès la première visite.
Headers de sécurité HTTP
Configurez ces headers sur votre serveur web :
# Empêche le chargement du site dans une iframe (protection clickjacking)
add_header X-Frame-Options "SAMEORIGIN" always;
# Désactive la détection automatique du type MIME
add_header X-Content-Type-Options "nosniff" always;
# Active le filtre XSS du navigateur
add_header X-XSS-Protection "1; mode=block" always;
# Contrôle les informations envoyées dans le Referer
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# Content Security Policy (à adapter à votre site)
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'nonce-{nonce}'; style-src 'self' 'unsafe-inline';" always;
La Content Security Policy (CSP) est la plus complexe à configurer mais aussi la plus efficace contre le XSS. Commencez en mode report-only pour identifier les ressources légitimes bloquées avant d'activer le blocage effectif.
Certificats : renouvellement automatique
Avec Let's Encrypt et Certbot, le renouvellement est automatisable :
certbot renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"
Planifiez via cron et configurez une alerte si le renouvellement échoue. Un certificat expiré en production est une urgence visible de tous vos utilisateurs — et un signal négatif pour vos prospects.
Configuration Drupal : Trusted Host Patterns
Assurez-vous que votre settings.php déclare les trusted host patterns pour éviter les attaques par manipulation d'hôte HTTP :
$settings['trusted_host_patterns'] = [
'^www\.votresite\.com$',
'^votresite\.com$',
];
Sans cette configuration, un attaquant peut injecter un en-tête Host falsifié dans les emails générés par Drupal (réinitialisation de mot de passe, notifications) et rediriger vos utilisateurs vers un site malveillant.
Pilier 5 : supervision et détection des incidents
Logging centralisé
Drupal enregistre les événements dans sa base de données (dblog), mais cette approche a ses limites : les logs peuvent être supprimés par un attaquant ayant accès à la BDD, et la consultation est lente sur les gros volumes.
Mettez en place un système de logging externe :
- Syslog : activez le module Drupal
syslogpour envoyer les logs au syslog système - ELK Stack (Elasticsearch + Logstash + Kibana) ou Loki + Grafana pour l'agrégation et la visualisation
- Solutions SaaS : Datadog, New Relic, ou équivalent si vous n'avez pas d'infrastructure dédiée
Configurez des alertes sur :
- Tentatives de connexion échouées répétées (> 5 par minute par IP)
- Accès aux chemins sensibles (
/admin,/user/login,/.git,/xmlrpc.php) - Erreurs PHP 500 en pic (signe potentiel d'exploitation d'une faille)
- Modifications de fichiers dans le répertoire racine Drupal
Vérification de l'intégrité des fichiers
Un outil de vérification d'intégrité compare régulièrement les fichiers de votre installation Drupal à leurs checksums officiels. Si un fichier a été modifié (par un attaquant ou par erreur), l'alerte se déclenche.
Outils :
- Tripwire ou AIDE au niveau système
drush pm:verifypour vérifier l'intégrité des fichiers Drupal core et contrib
Planifiez une vérification hebdomadaire et systématique après chaque déploiement.
Checklist d'audit sécurité Drupal actionnable
Utilisez cette checklist lors d'un audit interne ou comme base de travail pour mandater un prestataire.
Mises à jour et versions
- [ ] Drupal core est sur la dernière version stable
- [ ] Tous les modules contrib sont à jour
- [ ] Aucun module avec le statut "Unsupported" ou "Abandoned" n'est activé
- [ ] PHP est sur une version supportée (8.2+ en 2026)
- [ ] Les dépendances Composer (bibliothèques tierces) sont auditées (
composer audit)
Configuration Drupal
- [ ]
trusted_host_patternsest configuré danssettings.php - [ ] Les erreurs ne s'affichent pas aux utilisateurs anonymes (mode
hide) - [ ] Le rapport d'accès anonyme au dblog est désactivé
- [ ] Les modules de développement (
devel,kint,webprofiler) sont désactivés en production - [ ] Les rôles utilisateurs sont revus : aucun rôle non-admin n'a de permissions excessives
- [ ] L'accès au filesystem de configuration (
/sites/default/files/config_*) est bloqué au niveau serveur - [ ] Le module Security Review tourne et son rapport est à jour (zéro échec critique)
- [ ] Le module Paranoia est activé
Serveur et infrastructure
- [ ] TLS 1.0 et 1.1 sont désactivés
- [ ] HSTS est configuré avec une durée d'au moins 1 an
- [ ] Les security headers HTTP sont en place (X-Frame-Options, CSP, X-Content-Type-Options)
- [ ] Le WAF est configuré et actif
- [ ] L'accès à
/adminest restreint par IP si possible - [ ]
xmlrpc.phpest bloqué ou supprimé si non utilisé - [ ] Le répertoire
.gitn'est pas accessible via HTTP
Authentification et contrôle d'accès
- [ ] MFA (TFA) est activé pour tous les comptes administrateurs
- [ ] Le module Login Security ou Flood Control limite les tentatives de connexion
- [ ] Les mots de passe administrateurs respectent une politique de complexité
- [ ] Les comptes inactifs depuis plus de 90 jours sont désactivés ou supprimés
- [ ] Les clés API et secrets ne sont pas stockés en clair dans la base de données (module Key)
Sauvegarde et reprise
- [ ] Les sauvegardes quotidiennes de la BDD sont en place et testées
- [ ] Les fichiers uploadés sont sauvegardés séparément
- [ ] Le Plan de Reprise d'Activité (PRA) est documenté et testé
- [ ] Le délai de restauration cible (RTO) est connu et validé
Supervision et logs
- [ ] Les logs sont centralisés hors de la base Drupal
- [ ] Des alertes sont configurées sur les événements critiques
- [ ] La vérification d'intégrité des fichiers est planifiée
- [ ] Un processus de gestion des incidents est documenté
Les erreurs de configuration les plus fréquentes
Sur les sites Drupal que nous auditons chez DrupaLabs, ces problèmes reviennent systématiquement :
1. Le fichier settings.php est lisible depuis le web. La configuration serveur doit bloquer l'accès à /sites/default/settings.php et à tous les fichiers .php dans le répertoire sites/default. Une exposition de ce fichier révèle les credentials de base de données.
2. Les modules de développement restent actifs en production. devel, views_ui, field_ui — ces modules exposent des informations de débogage et des fonctionnalités qui ne doivent pas être accessibles en production. Automatisez leur désactivation dans votre pipeline de déploiement.
3. Le compte admin (uid=1) est utilisé en opérations courantes. Le compte uid=1 de Drupal passe outre toutes les permissions — il ne doit jamais être utilisé pour les opérations quotidiennes. Créez des comptes nommés avec les permissions minimales nécessaires.
4. Les mises à jour de modules contrib sont traitées avec moins d'urgence que core. Une vulnérabilité dans un module contrib populaire (Webform, Views, Paragraphs) peut être aussi critique qu'une faille dans core. Toute mise à jour marquée "Security release" mérite la même réactivité.
5. Le répertoire /files/ est indexable. Si la configuration du serveur web liste le contenu du répertoire /sites/default/files/, des documents internes, sauvegardes, ou fichiers temporaires peuvent être téléchargés par n'importe qui.
Drupal et la conformité réglementaire en 2026
RGPD et traitement des données
Drupal intègre des fonctionnalités natives pour la conformité RGPD (modules gdpr_fields, consentement cookies, gestion des droits utilisateurs). Mais la conformité réglementaire va au-delà de la configuration du CMS : elle touche la sécurité des données stockées.
Points de vigilance :
- Chiffrement des données personnelles sensibles au repos (module Encrypt)
- Durée de conservation des logs et données utilisateurs
- Traçabilité des accès aux données personnelles
- Procédure de notification en cas de violation de données (72h sous RGPD)
NIS2 pour les opérateurs essentiels
La directive NIS2, transposée en droit français en 2024, impose des obligations de sécurité renforcées aux opérateurs de services essentiels (OSE) et aux fournisseurs de services numériques importants (FSN). Si votre organisation est concernée, votre site Drupal fait partie du périmètre à sécuriser et à déclarer.
Les exigences NIS2 pertinentes pour Drupal :
- Gestion des mises à jour de sécurité dans des délais définis
- Supervision et logging des accès
- Plan de continuité et de reprise d'activité
- Analyse de risque documentée
Par où commencer ? Notre recommandation
Face à cette liste, la priorité dépend du niveau de maturité actuel de votre site. Si vous débutez, voici l'ordre recommandé :
- Semaine 1 — Appliquer toutes les mises à jour de sécurité en attente. Installer et exécuter Security Review. Corriger les échecs critiques.
- Semaine 2 — Vérifier la configuration TLS et les security headers. Configurer HSTS.
- Semaine 3 — Activer Paranoia et Login Security. Réviser les permissions des rôles utilisateurs.
- Semaine 4 — Mettre en place la centralisation des logs et les premières alertes.
- Mois 2 — Configurer le WAF. Mettre en place la vérification d'intégrité. Activer le MFA pour les administrateurs.
Si votre site gère des données sensibles ou des transactions B2B importantes, ne réalisez pas cet audit seul. Les configurations de sécurité mal paramétrées peuvent casser des fonctionnalités en production ou, pire, créer une fausse impression de sécurité.
Conclusion : la sécurité Drupal est un processus, pas un état
Un site Drupal sécurisé en janvier ne l'est pas forcément en juillet. Les menaces évoluent, les modules se mettent à jour, les configurations dérivent. La sécurité est un processus continu qui exige une veille régulière, des audits périodiques et une culture de la vigilance dans l'équipe.
Ce guide vous donne les bases pour évaluer votre situation actuelle et identifier vos priorités. Pour aller plus loin — et avoir une image précise et objective de votre exposition — un audit réalisé par une équipe spécialisée reste la démarche la plus fiable.
Obtenez un audit sécurité Drupal offert
Chez DrupaLabs, nous réalisons des audits de sécurité Drupal pour des organisations qui gèrent des sites critiques. Notre audit couvre l'ensemble des piliers décrits dans ce guide — mises à jour, configuration, WAF, TLS, supervision — et vous remet un rapport priorisé avec les actions correctives.
L'audit initial est offert pour les DSI et responsables IT qui souhaitent avoir une vision claire de leur niveau de sécurité actuel.
Demander l'audit sécurité offert →
Réponse sous 48h — sans engagement.