Vous êtes ici : » Accueil» MariaDB » Comment faire pour empêcher les injections SQL dans WordPress

Comment faire pour empêcher les injections SQL dans WordPress

(Dernière mise à jour le: 28 septembre 2021)

Les injections SQL dans WordPress, sont une méthode de piratage courante. Souvent utilisé pour insérer des liens malveillants et spam sur votre site Web. Lorsqu’il s’agit de protéger votre site WordPress, c’est une menace à laquelle vous devez être prêt ! Il est extrêmement important d’avoir un bon sécurité WordPress plan de . Dans cet article, j’expliquerai plus en détail ce qu’est une injection SQL et comment vous pouvez minimiser son apparition sur votre site Web.

Que sont les injections SQL ?

Les pirates peuvent entrer dans WordPress de plusieurs manières, mais comme vous l’avez peut-être deviné, le nom de l’injection SQL nous donne une idée de la manière dont ce piratage est réalisé ou de l’endroit où il est ciblé pour être plus précis.

Lire aussi : Tutoriel de test d’injection SQL (exemple et prévention des attaques par injection SQL)

Sécurité de la base de données WordPress

WordPress s’appuie sur PHP et une base de données MySQL pour fonctionner. Une grande partie des données de votre site Web sont stockées dans la base de données MySQL et sont sollicitées lorsque des personnes visitent votre site. Le code PHP est utilisé pour appeler des entrées dans la base de données.

Comment les gens ou les bots piratent-ils la base de données WordPress ?

En bref, une injection SQL peut se produire partout où vous avez un élément de formulaire sur votre site. Ceux-ci peuvent être :

  • Formulaires de contact
  • Formulaires d’abonnement
  • Formulaires de connexion

Barres de recherche et de nombreux autres champs de saisie.
Même la plus petite des vulnérabilités peut laisser votre base de données grande ouverte à une attaque SQL ! Les pirates informatiques recherchent essentiellement des sites présentant des vulnérabilités, lorsqu’ils en trouvent un, tout ce qu’ils ont à faire est d’utiliser une commande SQL malveillante au lieu d’une entrée de formulaire valide et c’est tout !

Pensez à votre formulaire de contact, par exemple. Si vous avez un champ de numéro de téléphone de contact, alors tout ce que vous voulez que les gens y mettent sont des chiffres, pas de lettres ou d’autres caractères. Si vous ne configurez pas correctement votre champ de formulaire ou si votre thème ou plugin a négligé cela, le pirate peut mettre tout ce qu’il veut dans ce champ, y compris du code malveillant !

Types d’injection SQL

Il existe généralement deux principaux types d’injection SQL ou plus précisément deux raisons principales pour lesquelles les attaquants utilisent des injections SQL.

Pour obtenir des informations sensibles – Classic SQLI

Ce type d’injection SQL renvoie essentiellement des informations sensibles au navigateur du pirate. Ils utiliseront des formulaires sur votre site pour interroger la base de données. Cela révèle ensuite des informations sur votre base de données, sa structure et son contenu. Ils peuvent ensuite utiliser ces informations pour lancer une attaque sur votre site Web.

Lire aussi : Meilleurs outils d’injection SQL gratuits et open source

Pour exécuter des actions de base de données – Blind SQLI

Comme son nom l’indique, une injection aveugle ne cherche pas à renvoyer des données en tant que telles, elle cherche à exécuter des actions de base de données comme la suppression, la modification ou l’ajout de tables.

Vous constaterez peut-être que vous avez été victime d’une ou des deux injections SQL WordPress, ils ont peut-être supprimé la table wp_users, vous ne pouvez donc plus accéder à l’administrateur de votre site Web . Ils peuvent avoir glané des informations sensibles sur votre base de données et ajouté du code malveillant, des logiciels malveillants, des liens de spam, des redirections et des fenêtres contextuelles sur votre site.

Pourquoi WordPress ne bloque-t-il pas cela par défaut ?

WordPress en tant que plate-forme est en fait très sécurisé, et ils prennent ce type de sécurité très au sérieux. La sécurité des versions de WordPress et les correctifs de bogues sont mis à jour à tout moment. WordPress alimente en effet environ 34% d’Internet à l’heure actuelle, ce qui qu’il signifie s’agit d’une cible importante pour les pirates informatiques qui ont déclaré que WordPress faisait un excellent travail pour assurer la sécurité de son logiciel.

Le point faible est souvent les thèmes et les plugins, c’est pourquoi un strict plan de sécurité et de maintenance WordPress est essentiel. Les plugins et les thèmes sont abandonnés, ou les auteurs ne sont pas très soucieux de la sécurité et ne corrigent pas les vulnérabilités très rapidement. Prendre le plugin RichReviews avec à l’heure actuelle a été supprimé du WordPress référentiel car il n’est pas sécurisé. Cela a été signalé par Wordfence et est vulnérable depuis un certain temps. Le problème particulier avec ce plugin est qu’il est ouvert à XSS via la mise à jour des options de plugin non authentifié. Les pirates exploitent cela pour injecter du code malveillant dans les sites . Comme vous pouvez le voir, il est extrêmement important de s’assurer que votre site est sécurisé et toujours à jour.

C’est ce que les pirates exploitent souvent. C’est pourquoi nous dirons toujours à tout le monde d’avoir le moins de thèmes et de plugins possible et de les tenir à jour à tout moment. Si un thème ou un plugin n’est plus pris en charge ou n’a pas été mis à jour depuis un certain temps, nous vous suggérons de rechercher une alternative.

Comment empêcher l’injection SQL

Avant d’aller plus loin, assurez-vous de faire une sauvegarde de votre base de données et des fichiers de votre site. Il est très important que vous ayez une copie de travail de votre site avant d’apporter des modifications, donc en cas de panne de votre site ou de problème, vous pouvez facilement le restaurer.

  1. Utiliser des plugins et des thèmes de confiance

    Comme mentionné ci-dessus, il existe de nombreuses façons pour les pirates d’entrer, il est donc préférable de vous assurer de couvrir toutes les bases. N’utilisez que des auteurs de plugins et de thèmes de confiance, n’utilisez JAMAIS de plugins ou de thèmes annulés ou piratés !

  2. Assurez-vous que votre matériel est sécurisé

    Assurez-vous que l’ordinateur que vous utilisez pour accéder à votre site est également sécurisé avec les dernières mises à jour et un logiciel antivirus.

  3. Assurez-vous que votre configuration d’hébergement est sécurisée

    Trop souvent, les gens négligent la sécurité de leur hébergement. La plupart optent pour des hébergeurs partagés bon marché avec peu de soin pour votre sécurité WordPress. Peu importe ce que vous faites ailleurs sur votre site Web, si votre hébergement et/ou votre serveur ne sont pas sécurisés, vous perdez votre temps.

  4. Gardez les champs de saisie du formulaire à un minimum et correctement configuré

    Les champs de formulaire et la saisie sont le point d’accès clé pour une injection SQL, n’utilisez donc que ce dont vous avez besoin et assurez-vous de les configurer correctement. Si un champ ne nécessite qu’un numéro de téléphone, autorisez uniquement ce champ à accepter des numéros.

  5. Utilisez un bon plugin de sécurité et WAF

    Il est essentiel que vous utilisiez un bon pare-feu d’application Web (WAF) et un plug-in de surveillance de la sécurité. Ceux-ci vous avertiront souvent des problèmes afin que vous puissiez travailler à les corriger ou à les bloquer avant que quelque chose de majeur ne se produise. Nous recommandons Wordfence ou Sucuri mais il y en a plein d’autres.

  6. Utilisez les règles .htaccess pour vous protéger de l’injection SQL WordPress

    Si vous utilisez un serveur Apache, vous pouvez utiliser le fichier .htaccess pour bloquer certaines des tentatives d’injection SQL. Cela ne garantira pas à 100% que vous ne serez jamais attaqué, mais peut être utile pour minimiser les injections SQL.
    Ci-dessous, nous avons créé une liste des meilleures règles .htaccess pour renforcer votre site Web WordPress.

Règles .htaccess pour se protéger de l’injection SQL de WordPress et renforcer WordPress

1. Rediriger tous les Http vers Https

Si vous disposez d’un certificat SSL, vous souhaiterez peut-être rediriger tout le trafic non sécurisé (HTTP) vers https. Vous pouvez le faire en ajoutant le code ci-dessous le fichier .htaccess à la racine de votre installation WordPress. Si vous n’avez pas ce fichier à la racine, vous pouvez en créer un, puis copiez et collez ce code dans le fichier. Une fois que vous avez fait cela, enregistrez-le et téléchargez-le à la racine de votre site Web.

#Redirect http to https
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

2. Bloquez les robots malveillants

Certains bots sont connus pour être mauvais et devraient simplement être bloqués. Copiez ce code dans le fichier .htaccess racine de votre site Web.

#Block bad hackers
SetEnvIfNoCase User-Agent "^libwww-perl*" block_bad_bots
Deny from env=block_bad_bots

3. Désactiver la navigation dans les répertoires

Comment faire pour empêcher les injections SQL dans WordPress

Si vous ne bloquez pas la navigation dans les répertoires, les pirates peuvent simplement entrer une URL comme votresite.com/wp-includes/ et voir tous les fichiers et informations de votre site. C’est un gros risque pour la sécurité et vous devez le désactiver immédiatement. Vous pouvez le faire en ajoutant le code suivant à votre fichier root .htaccess.

# Disable directory browsing
Options All -Indexes

Une fois que vous avez ajouté que les personnes qui tentent d’accéder à ces URL recevront un message comme celui ci-dessous.

Comment faire pour empêcher les injections SQL dans WordPress

4. Refuser l’accès aux fichiers

Étant donné que nous apportons toutes ces modifications au fichier .htaccess, il est logique que nous en bloquions l’accès afin que personne ne puisse voir quelles règles nous y avons mises ! De plus, nous devrions verrouiller quelques autres fichiers comme votre fichier wp-config qui contient toutes vos informations de connexion à la base de données !

Pour ce faire, ajoutez ce qui suit au fichier .htaccess racine de votre site. Cela bloquera l’accès à tout fichier .htaccess n’importe où sur votre site, ce qui est conseillé.

# Deny access to all .htaccess files
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>
 
# Deny access to readme.html
<files readme.html>
Order allow,deny
Deny from all
</files>
 
# Deny access to license.txt
<files license.txt>
Order allow,deny
Deny from all
</files>
 
# Deny access to wp-config.php file
<files wp-config.php>
order allow,deny
deny from all
</files>
 
# Deny access to error_log
<files error_log>
Order allow,deny
Deny from all
</files>

 

5. Bloquer l’accès au dossier et aux fichiers wp-inclus

Le dossier wp-includes est une partie importante du logiciel WordPress et contient la majorité des fichiers de votre site. C’est tout ce que contient ce dossier. Vos propres téléchargements, plugins et thèmes, etc. ne vont pas là-dedans, donc personne n’a vraiment besoin d’accéder au dossier wp-includes, pas même vous ! Utilisez le code ci-dessous dans le fichier .htaccess des racines de votre site Web pour bloquer l’accès au dossier et aux fichiers wp-includes.

# Deny access to wp-includes folder and files
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>

6. Bloquer les scripts intersites (XSS)

Cet extrait de code bloque certaines attaques XSS courantes, principalement les injections de scripts et les tentatives de modification de variables. Utilisez le code ci-dessous dans le fichier .htaccess de votre site Web pour bloquer ces attaques XSS courantes.

# Blocks some XSS attacks
<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} (\|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule .* index.php [F,L]
</IfModule>

7. Restreindre l’accès direct aux fichiers PHP de plugin et de thème

En règle générale, il n’y a aucune raison pour que quelqu’un d’autre que vous ait besoin d’un accès direct aux fichiers de plugin et de thème. Cet extrait désactive les appels directs aux fichiers de thème et de plug-in. Ajoutez simplement ceci au fichier .htaccess des racines de votre site Web.

# Restricts access to PHP files from plugin and theme directories
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/directory/to/exclude/
RewriteRule wp-content/plugins/(.*\.php)$ - [R=404,L]
RewriteCond %{REQUEST_URI} !^/wp-content/themes/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/themes/directory/to/exclude/
RewriteRule wp-content/themes/(.*\.php)$ - [R=404,L]

8. Protégez-vous contre l’injection SQL

Le dernier mais non le moindre est la protection contre l’injection SQL dans WordPress. Il est important de noter à nouveau que cela ne vous protégera pas à 100% pour toujours, alors n’utilisez pas aveuglément ce code et pensez que c’est tout. Vous devez garder le contrôle de votre surveillance de la sécurité tout le temps. Cela bloquera cependant au moins certaines des tentatives les plus courantes d’injection SQL. Insérez ce code dans votre fichier root .htaccess.

# Protect Against SQL Injection
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC]
RewriteRule ^(.*)$ - [F,L]
RewriteCond %{QUERY_STRING} \.\.\/ [NC,OR]
RewriteCond %{QUERY_STRING} boot\.ini [NC,OR]
RewriteCond %{QUERY_STRING} tag\= [NC,OR]
RewriteCond %{QUERY_STRING} ftp\:  [NC,OR]
RewriteCond %{QUERY_STRING} http\:  [NC,OR]
RewriteCond %{QUERY_STRING} https\:  [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [NC,OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>|ê|"|;|\?|\*|=$).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%24&x).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F|127\.0).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(globals|encode|localhost|loopback).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(request|select|insert|union|declare).* [NC]
RewriteCond %{HTTP_COOKIE} !^.*WordPress_logged_in_.*$
RewriteRule ^(.*)$ - [F,L]
</IfModule>

9. Blocage de l’exécution du code PHP avec les règles .htaccess

En plus des règles ci-dessus, vous pouvez également arrêter l’exécution du code PHP dans certains dossiers comme vos dossiers wp-content/uploads et wp-includes/. En fonction de votre thème et de la configuration de votre plugin, cela peut fonctionner ou peut casser certaines choses. Vous pouvez les essayer et voir comment vous allez. S’ils entraînent des erreurs, supprimez simplement le fichier.

Bloquer l’exécution de PHP dans le dossier wp-includes

Pour cela, vous devez créer un nouveau fichier .htaccess avec le code ci-dessous. Ce fichier doit ensuite être téléchargé dans le répertoire wp-includes.

# Protect Against php execution
<Files *.php>
deny from all
</Files>

Bloquer l’exécution de PHP dossier wp-content/uploads

En règle générale, vous ne devriez pas avoir de code PHP dans votre dossier de téléchargement car il est là pour stocker vos images. Le code ci-dessous autorise essentiellement les types de fichiers ci-dessous mais ne permet pas l’exécution de PHP. Encore une fois, cela doit être un nouveau fichier .htaccess avec le code ci-dessous, puis téléchargé dans le répertoire wp-content/uploads.

# Disable access to all file types except the following
#Order deny,allow
#Deny from all
#<Files ~ ".(xml|css|js|jpe?g|png|gif|pdf|docx|rtf|odf|zip|rar)$">
#Allow from all
#</Files>

Fichier .htaccess complet pour bloquer les robots malveillants, accéder aux fichiers et bloquer l’injection SQL

Pour faciliter l’utilisation, vous trouverez ci-dessous toutes les règles décrites ci-dessus pour le fichier racine .htaccess. N’oubliez pas que le fichier racine .htaccess se trouve dans le répertoire racine de votre site Web (au même endroit que le fichier wp-config.php.)

##############################
#.HTACCESS FILE INFO BY 
#THRIVEWP.COM
##############################

#BEGIN https code
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

#BEGIN Block bad hackers
SetEnvIfNoCase User-Agent "^libwww-perl*" block_bad_bots
Deny from env=block_bad_bots

# Disable directory browsing
Options All -Indexes

# Deny access to all .htaccess files
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>
 
# Deny access to readme.html
<files readme.html>
Order allow,deny
Deny from all
</files>
 
# Deny access to license.txt
<files license.txt>
Order allow,deny
Deny from all
</files>
 
# Deny access to wp-config.php file
<files wp-config.php>
order allow,deny
deny from all
</files>
 
# Deny access to error_log
<files error_log>
Order allow,deny
Deny from all
</files>

# Deny access to wp-includes folder and files
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>

# Blocks some XSS attacks
<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} (\|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule .* index.php [F,L]
</IfModule>

# Restricts access to PHP files from plugin and theme directories
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/directory/to/exclude/
RewriteRule wp-content/plugins/(.*\.php)$ - [R=404,L]
RewriteCond %{REQUEST_URI} !^/wp-content/themes/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/themes/directory/to/exclude/
RewriteRule wp-content/themes/(.*\.php)$ - [R=404,L]

# Protect Against SQL Injection
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC]
RewriteRule ^(.*)$ - [F,L]
RewriteCond %{QUERY_STRING} \.\.\/ [NC,OR]
RewriteCond %{QUERY_STRING} boot\.ini [NC,OR]
RewriteCond %{QUERY_STRING} tag\= [NC,OR]
RewriteCond %{QUERY_STRING} ftp\:  [NC,OR]
RewriteCond %{QUERY_STRING} http\:  [NC,OR]
RewriteCond %{QUERY_STRING} https\:  [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [NC,OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>|ê|"|;|\?|\*|=$).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%24&x).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F|127\.0).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(globals|encode|localhost|loopback).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(request|select|insert|union|declare).* [NC]
RewriteCond %{HTTP_COOKIE} !^.*WordPress_logged_in_.*$
RewriteRule ^(.*)$ - [F,L]
</IfModule>

Lire aussi : Comment installer MySQL ?

Laisser un commentaire

Translate »