.

Modules de Sécurité Drupal et Meilleures Pratiques pour Votre Site Web

La sécurité des solutions que nous fournissons est un facteur très important pour nous. En raison de cela et du fait que Drupal est le CMS le plus sûr, dans cet article, nous présenterons la liste des recommandations qui permettront d'augmenter encore la sécurité de votre site Drupal.

Sécurité de Drupal. Pourquoi est-il bon de rester à jour?

Votre application est moins susceptible d'exploiter des vulnérabilités connues. C'est tout. Mais cela signifie bien plus.

Comme je l'ai mentionné auparavant, mettre à jour les modules et bibliothèques est l'une des méthodes les plus simples pour améliorer la sécurité de notre application. La communauté Drupal, soutenue par l'équipe spéciale de sécurité de Drupal, surveille constamment les rapports des utilisateurs concernant d'éventuels bogues de sécurité et aide les auteurs de modules à les résoudre. Le résultat de ces actions est les mises à jour des modules qui introduisent des correctifs de sécurité.

Configuration du panneau de connexion

Un panneau de connexion mal configuré peut fournir des informations sur l'existence dans la base de données d'un utilisateur utilisant le login fourni dans le formulaire. Si l'information que le panneau renvoie dans le cas où l'attaquant fournit un login incorrect est différente de celle quand le login est correct, nous traitons avec un vecteur d'attaque par force brute. De cette manière, l'attaquant peut d'abord obtenir les logins, puis essayer de deviner les mots de passe.

Modules Drupal augmentant la sécurité du site web

Drupal dispose de plusieurs modules qui peuvent améliorer la sécurité. Leur configuration ne nécessite pas de connaissances techniques poussées et ne prend pas autant de temps que d'autres méthodes de sécurisation d'un site. Nous présentons ci-dessous quelques outils de ce type.

Drupal Password Policy

Le module Password Policy permet d'imposer des restrictions sur les mots de passe des utilisateurs en définissant des politiques de mot de passe. Cela peut être défini par un ensemble de exigences qui doivent être remplies avant qu'un changement de mot de passe utilisateur soit accepté. Chaque restriction a un paramètre qui spécifie le nombre minimum de conditions importantes qui doivent être remplies pour satisfaire l’exigence.

Supposons que nous soyons limités aux lettres majuscules (avec le paramètre 2), ainsi qu'aux chiffres (avec le paramètre 4). Cela signifie qu'un mot de passe utilisateur doit contenir au moins deux lettres majuscules et au moins quatre chiffres pour être accepté.

Le module implémente également la fonction "expirant des mots de passe". L'utilisateur est obligé de changer son mot de passe et est éventuellement bloqué lorsque son vieux mot de passe expire.

Drupal Password Policy permet aux administrateurs d'obliger des utilisateurs spécifiques ou des rôles entiers à changer leur mot de passe lors de leur prochaine connexion. La demande de changement de mot de passe, accompagnée du formulaire approprié, apparaît sous forme de popup plutôt que de rediriger l'utilisateur vers la page typique user/{user_id}/edit.

Examen de la sécurité de Drupal

Le module Security Review automatise le contrôle de nombreuses erreurs faciles à faire qui rendent le site peu sûr. Ce module Drupal est intuitif et très facile à utiliser. Le rapport rapidement préparé est lisible et indique clairement ce qui doit être amélioré. Le module n'introduit pas automatiquement de changements sur votre page. Les résultats du rapport doivent être analysés, et – dans certains cas sélectionnés – des corrections appropriées doivent être apportées. Toutes les recommandations ne seront pas acceptables. Tout dépend des facteurs uniques de votre site.

Drupal Security Kit

Le module Security Kit offre une variété d'options améliorant la sécurité pour aider à réduire le risque que diverses vulnérabilités de votre application soient exploitées. Le module réduit la probabilité d'utilisation de nombreux types d'attaques, y compris :

  • cross-site scripting,
  • cross-site request forgery,
  • clickjacking.

La description complète des fonctionnalités peut être trouvée dans l'article lié ci-dessus.

Security Kit est l'un des modules Drupal qui aident à augmenter la sécurité des sites web

Source : Drupal.org

Drupal Paranoia

Le module Paranoia identifie la plupart des endroits où l'utilisateur peut exécuter du code PHP en utilisant l'interface Drupal et les bloque ensuite. Cela réduit la menace potentielle résultant de l'attaqueur obtenant une autorisation de haut niveau dans Drupal.

Que fait le module ?

  • Bloque l'octroi de la permission d'utilisation de PHP pour la visibilité des blocs.
  • Bloque la capacité de créer des formats de texte utilisant le filtre PHP.
  • Bloque la possibilité de modifier le compte utilisateur avec uid 1.
  • Bloque l'octroi des permissions qui peuvent réduire la sécurité du site web.
  • Bloque la désactivation de ce module. Pour le désactiver, vous devez modifier la base de données.

Pour tirer pleinement parti de ce module, vous devez identifier toutes les entités, champs et blocs qui utilisent le filtre PHP de Drupal et les modifier afin qu'ils fonctionnent sans lui, puis retirer le filtre PHP standard disponible dans admin/config/content/formats.

Comment créer un code sécurisé dans Drupal?

Drupal utilise des solutions supposées être sécurisées lorsqu'elles sont utilisées selon les normes. Il existe de nombreuses règles à suivre lors de la création d'un code sécurisé. Nous présentons ci-dessous les plus importantes.

Utiliser Twig

Le moteur Twig "auto-échappe" toutes les variables par défaut. Cela signifie que toutes les chaînes rendues par les modèles Twig (par exemple, tout ce qui se trouve entre {{ }}) sont automatiquement nettoyées des éléments qui pourraient compromettre la sécurité de votre application.

Lors du rendu des attributs, assurez-vous de les inclure entre guillemets " ou apostrophes '. Par exemple, class=”{{foo}}”, et non class={{foo}}.

Utiliser des espaces réservés

L'API de traduction nettoie également les chaînes. Utilisez-la pour les chaînes que vous souhaitez traduire et plus tard, par exemple, afficher sur le côté frontend.

Dans Drupal, il existe trois types d'espaces réservés dans l'API de traduction :

@variable

Nous l'utilisons lorsque nous voulons substituer une chaîne ou un objet de la classe MarkupInterface à un espace réservé.

%variable

Nous l'utilisons lorsque nous voulons intégrer une valeur entre les balises variable.

:variable

Nous l'utilisons lorsque la valeur que nous voulons substituer est l'URL que nous voulons intégrer dans l'attribut href.

Vous pouvez en savoir plus sur les espaces réservés sur Drupal.org.

Apprenez l'API et utilisez-la

Drupal offre de nombreuses fonctionnalités pour nettoyer les chaînes. Parmi elles :

t(), Drupal::translation()->formatPlural()

Utilisé avec les espaces réservés décrits ci-dessus, il permet de créer des chaînes sécurisées prêtes à être traduites.

Html::escape()

Utilisé pour nettoyer le texte brut.

Xss::filterAdmin()

Utilisez-le lorsque vous souhaitez nettoyer le texte saisi par un administrateur qui devrait pouvoir utiliser la plupart des balises et attributs HTML.

UrlHelper::stripDangerousProtocols(), UrlHelper::filterBadProtocol()

Utile pour la vérification des URL, peut être utilisé avec SafeMarkup::format().

Les chaînes qui ont passé par les fonctions t(), Html::escape(), Xss::filter() ou Xss::filterAdmin() sont automatiquement considérées comme sûres, tout comme les chaînes produites par le tableau de rendu depuis la classe Renderer.

Filtrer le texte également en JavaScript

Le filtrage de texte côté serveur est considéré comme l'une des meilleures pratiques. Cependant, il existe des cas où le filtrage aura également lieu côté client pour fournir une capacité de filtrage temporaire supplémentaire. C'est utile, par exemple, lors du rendu des éléments qui sont mis à jour au fur et à mesure que l'utilisateur tape le texte (c'est-à-dire qu'il y a des changements dans l'arborescence DOM introduits). Pour filtrer le texte dans Drupal en utilisant JavaScript, vous devriez utiliser la fonction Drupal.checkPlain(). Cette fonctionnalité nettoie le texte en supprimant les éléments nocifs et protège contre, par exemple, certaines méthodes d'attaque par clickjacking.

Utilisez une couche d'abstraction lorsque vous travaillez avec une base de données

Nous recommandons de ne jamais utiliser de valeurs pures dans les requêtes. Vous devriez utiliser des espaces réservés à la place.

Exemple :

\Database::getConnection()->query('SELECT foo FROM {table} t WHERE t.name = ‘ . $_GET['user']);

Vs

\Database::getConnection()->query('SELECT foo FROM {table} t WHERE t.name = :name', [':name' => $_GET['user']]);

Dans le second cas, au lieu d'utiliser directement la valeur du paramètre user, nous la fournissons comme substitut de l'espace réservé :name. De cette façon, avant de mettre cette valeur dans la requête finale, Drupal la nettoiera d'abord des éléments qui pourraient causer une injection SQL.

Audit de sécurité

Le processus de "renforcement" d'un site devrait se terminer par un audit de sécurité complet qui attrapera encore plus de menaces potentielles sur votre page.

Un audit de sécurité devrait inclure :

Revue des modules et des bibliothèques. Cela signifie vérifier les versions des modules Drupal installés, examiner les correctifs, les bibliothèques PHP et JavaScript.

Revue de la configuration. Dans le cadre de cette activité, nous réalisons des audits d'autorisation pour les rôles, les vues, les fichiers routing.yml dans les modules personnalisés, les formats de texte, la journalisation des erreurs et les formulaires.

Revue du dépôt. Nous vérifions les modules et thèmes personnalisés, y compris le routage, les formulaires personnalisés, les requêtes SQL, les mécanismes de filtrage et les permissions de fichier.

Identification du contenu du dépôt. Nous auditons le contenu des fichiers settings.php et .env. Nous effectuons également un audit des éléments profondément cachés. Cela se base sur la vérification du dépôt pour, par exemple, des clés privées SSL ou des copies ou dumps de base de données.

Vous pouvez trouver la description complète de nombreux éléments présentés dans la liste ci-dessus dans les articles liés.

Modules de sécurité Drupal - résumé

Selon le niveau d'avancement et de connaissance de Drupal, vous pouvez apporter des corrections appropriées à l'application pour la rendre plus sécurisée. Les exemples présentés dans cet article réduiront certainement le nombre de vecteurs d'attaque et la probabilité de leur utilisation. Nous recommandons d'analyser les options disponibles et éventuellement d'introduire les modifications ou nouveaux éléments qui réduiront le risque d'une attaque sur votre application. Si vous avez besoin d'aide pour de telles activités, notre équipe de support Drupal peut mener un audit de la sécurité de votre site web.

As part of Drupal support, we maintain existing websites and expand them with new functionalities