Aller au contenu
Article

Sécurité Drupal en 2026 : guide complet pour les DSI

18 min

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é :

  1. Évaluez si son usage est critique
  2. Cherchez une alternative maintenue
  3. 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

ModuleUsage
HoneypotProtection anti-spam sur les formulaires
Flood ControlLimite les tentatives de connexion échouées
KeyGestion sécurisée des clés API et secrets
EncryptChiffrement des données sensibles en base
Two-factor Authentication (TFA)MFA pour les comptes administrateurs
Login SecurityBlocage IP après N tentatives échouées
Permissions by TermContrô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 :

  1. Blocage des requêtes contenant des payloads d'injection SQL classiques
  2. Blocage des tentatives de traversée de répertoire (../, ..%2F)
  3. Rate limiting sur /user/login : maximum 10 tentatives / minute par IP
  4. Blocage des User-Agents connus pour le scanning (Nmap, Nikto, sqlmap)
  5. Filtrage des requêtes vers /xmlrpc.php si vous n'utilisez pas XML-RPC
  6. 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 syslog pour 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:verify pour 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_patterns est configuré dans settings.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 à /admin est restreint par IP si possible
  • [ ] xmlrpc.php est bloqué ou supprimé si non utilisé
  • [ ] Le répertoire .git n'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é :

  1. Semaine 1 — Appliquer toutes les mises à jour de sécurité en attente. Installer et exécuter Security Review. Corriger les échecs critiques.
  2. Semaine 2 — Vérifier la configuration TLS et les security headers. Configurer HSTS.
  3. Semaine 3 — Activer Paranoia et Login Security. Réviser les permissions des rôles utilisateurs.
  4. Semaine 4 — Mettre en place la centralisation des logs et les premières alertes.
  5. 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.

Un projet web en tête ?

Commençons par un diagnostic : ce qui vous ralentit, et par où commencer.

Demander un diagnostic

Articles liés

Newsletter

Restez dans la boucle Drupal

Conseils, retours d'expérience et actualités Drupal — directement dans votre boîte mail, sans spam.

Pas de spam. Désinscription possible à tout moment.