Saviez-vous que chaque jour, des milliers de sites WordPress sont victimes d’attaques ? Selon une étude récente, plus de 90 000 attaques sont enregistrées quotidiennement sur les sites utilisant cette plateforme. Les menaces sont nombreuses et variées : hack, injection SQL, malware, phishing, et bien d’autres. Ces attaques peuvent avoir des conséquences désastreuses pour votre business en ligne, allant de la perte de données à la dégradation de votre réputation. Il est donc crucial de comprendre les risques et de mettre en place des mesures de sécurité efficaces. Dans cet article, nous allons explorer les fondamentaux de la sécurité WordPress, les techniques avancées pour renforcer votre site, et les meilleurs plugins de sécurité. Nous aborderons également des cas pratiques et des témoignages pour illustrer l’importance de ces mesures.
Les fondamentaux de la sécurité WordPress
Mises à jour
La première étape pour sécuriser votre site WordPress est de maintenir à jour votre installation, vos thèmes et vos plugins. Les mises à jour contiennent souvent des correctifs de sécurité qui protègent votre site contre les nouvelles vulnérabilités. Ne négligez pas cette étape, car elle est essentielle pour prévenir les attaques.
Mots de passe
Utiliser des mots de passe forts est une autre mesure de base. Un bon mot de passe doit être long, complexe et unique. Utilisez un gestionnaire de mots de passe pour générer et stocker des mots de passe sécurisés. Cela réduit considérablement le risque de piratage.
Choix de l’hébergement
Le choix de votre hébergeur est crucial. Optez pour un hébergeur fiable et sécurisé qui offre des fonctionnalités de sécurité avancées, comme des pare-feu, des sauvegardes automatiques et un support technique réactif.
Sauvegardes
Réaliser des sauvegardes régulières de votre site est une pratique indispensable. En cas d’attaque, vous pourrez restaurer votre site rapidement et minimiser les pertes de données. Assurez-vous de stocker vos sauvegardes dans un emplacement sécurisé.
Techniques avancées pour sécuriser son site WordPress
Renforcer les paramètres de connexion
Changer l’URL de connexion (wp-login.php)
Modifier l’URL de connexion par défaut peut rendre plus difficile l’accès à votre tableau de bord pour les hackers. Vous pouvez utiliser un plugin comme WPS Hide Login pour changer cette URL, mais il est également possible de le faire manuellement.
Avec un plugin :
- Installez et activez le plugin WPS Hide Login.
- Allez dans Réglages > WPS Hide Login.
- Entrez une nouvelle URL de connexion, par exemple
/mon-login
. - Cliquez sur Enregistrer les modifications.
Sans plugin :
- Ajoutez le code suivant à votre fichier
functions.php
:
function custom_login_url() {
add_rewrite_rule('^mon-login$', 'wp-login.php', 'top');
}
add_action('init', 'custom_login_url');
function custom_login_redirect() {
if (preg_match('/wp-login\.php/', $_SERVER['REQUEST_URI'])) {
wp_redirect(home_url('/mon-login'));
exit;
}
}
add_action('init', 'custom_login_redirect');
- Enregistrez les modifications et allez dans Réglages > Permaliens pour actualiser les règles de réécriture.
Limiter les tentatives de connexion
Limiter le nombre de tentatives de connexion peut prévenir les attaques par force brute. Vous pouvez utiliser un plugin comme Limit Login Attempts Reloaded, mais il est également possible de le faire manuellement.
Avec un plugin :
- Installez et activez le plugin Limit Login Attempts Reloaded.
- Allez dans Réglages > Limit Login Attempts.
- Configurez le nombre de tentatives autorisées et la durée du blocage.
- Cliquez sur Enregistrer les modifications.
Sans plugin :
- Ajoutez le code suivant à votre fichier
functions.php
:
function limit_login_attempts($user, $username, $password) {
$max_attempts = 3;
$lockout_duration = 300; // 5 minutes
if (get_transient('attempted_login')) {
$attempts = get_transient('attempted_login');
if ($attempts >= $max_attempts) {
$lockout_time = get_option('lockout_time');
if ($lockout_time && (time() - $lockout_time) < $lockout_duration) {
return new WP_Error('too_many_failed_login_attempts', 'Vous avez dépassé le nombre de tentatives de connexion autorisées. Veuillez réessayer plus tard.');
}
}
}
if (is_wp_error($user)) {
$attempts = get_transient('attempted_login') ? get_transient('attempted_login') : 0;
$attempts++;
set_transient('attempted_login', $attempts, $lockout_duration);
if ($attempts >= $max_attempts) {
update_option('lockout_time', time());
}
} else {
delete_transient('attempted_login');
delete_option('lockout_time');
}
return $user;
}
add_filter('authenticate', 'limit_login_attempts', 30, 3);
Masquer les erreurs de connexion
Masquer les messages d’erreur de connexion peut empêcher les hackers de savoir s’ils ont trouvé un nom d’utilisateur valide. Modifiez votre fichier functions.php
pour masquer ces messages :
function no_wordpress_errors(){
return 'Quelque chose s\'est mal passé!';
}
add_filter( 'login_errors', 'no_wordpress_errors' );
Protéger les fichiers clés
Bloquer l’accès direct aux fichiers PHP
Utilisez des règles .htaccess
pour bloquer l’accès direct aux fichiers PHP sensibles. Cela empêche les utilisateurs non autorisés d’accéder à ces fichiers. Ajoutez les lignes suivantes à votre fichier .htaccess
:
<FilesMatch "\.(php|php\.)$">
Order Allow,Deny
Deny from all
</FilesMatch>
Limiter l’accès à l’administration du site
Restreindre l’accès à l’administration de votre site à certaines adresses IP peut renforcer la sécurité. Vous pouvez utiliser un plugin comme WP Security, mais il est également possible de le faire manuellement.
Avec un plugin :
- Installez et activez le plugin WP Security.
- Allez dans WP Security > Firewall.
- Ajoutez les adresses IP autorisées.
- Cliquez sur Enregistrer les modifications.
Sans plugin :
- Ajoutez le code suivant à votre fichier
.htaccess
:
<Files wp-login.php>
Order Deny,Allow
Deny from all
Allow from 192.168.1.1 # Remplacez par votre adresse IP
</Files>
Protéger le fichier wp-config.php
Le fichier wp-config.php
contient des informations sensibles. Déplacez-le en dehors du répertoire racine de votre site pour le protéger. Voici comment procéder :
- Déplacez le fichier
wp-config.php
un niveau au-dessus du répertoire racine de votre site. - Modifiez le fichier
wp-config.php
pour inclure le chemin correct :
<?php
/**
* The base configuration for WordPress
*
* The wp-config.php creation script uses this file during the
* installation. You don't have to use the web site, you can
* copy this file to "wp-config.php" and fill in the values.
*
* This file contains the following configurations:
*
* * MySQL settings
* * Secret keys
* * Database table prefix
* * ABSPATH
*
* @link https://wordpress.org/support/article/editing-wp-config-php/
*
* @package WordPress
*/
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'your_database_name' );
/** MySQL database username */
define( 'DB_USER', 'your_database_user' );
/** MySQL database password */
define( 'DB_PASSWORD', 'your_database_password' );
/** MySQL hostname */
define( 'DB_HOST', 'localhost' );
/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8mb4' );
/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
/**#@+
* Authentication Unique Keys and Salts.
*
* Change these to different unique phrases!
* You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
* You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
*
* @since 2.6.0
*/
define( 'AUTH_KEY', 'put your unique phrase here' );
define( 'SECURE_AUTH_KEY', 'put your unique phrase here' );
define( 'LOGGED_IN_KEY', 'put your unique phrase here' );
define( 'NONCE_KEY', 'put your unique phrase here' );
define( 'AUTH_SALT', 'put your unique phrase here' );
define( 'SECURE_AUTH_SALT', 'put your unique phrase here' );
define( 'LOGGED_IN_SALT', 'put your unique phrase here' );
define( 'NONCE_SALT', 'put your unique phrase here' );
/**#@-*/
/**
* WordPress Database Table prefix.
*
* You can have multiple installations in one database if you give each
* a unique prefix. Only numbers, letters, and underscores please!
*/
$table_prefix = 'wp_';
/**
* For developers: WordPress debugging mode.
*
* Change this to true to enable the display of notices during development.
* It is strongly recommended that plugin and theme developers use WP_DEBUG
* in their development environments.
*
* For information on other constants that can be used for debugging,
* visit the documentation.
*
* @link https://wordpress.org/support/article/debugging-in-wordpress/
*/
define( 'WP_DEBUG', false );
/* That's all, stop editing! Happy publishing. */
/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', dirname( __FILE__ ) . '/' );
}
/** Sets up WordPress vars and included files. */
require_once( ABSPATH . 'wp-settings.php' );
Désactiver les fonctionnalités inutiles
Désactiver XML-RPC
XML-RPC peut être utilisé pour des attaques par force brute. Désactivez-le si vous n’en avez pas besoin. Vous pouvez utiliser un plugin comme Disable XML-RPC, mais il est également possible de le faire manuellement.
Avec un plugin :
- Installez et activez le plugin Disable XML-RPC.
- Allez dans Réglages > Disable XML-RPC.
- Cochez l’option pour désactiver XML-RPC.
- Cliquez sur Enregistrer les modifications.
Sans plugin :
- Ajoutez le code suivant à votre fichier
.htaccess
:
<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>
Désactiver l’API REST de WP
Si vous n’utilisez pas l’API REST de WordPress, désactivez-la pour réduire les risques de sécurité. Vous pouvez utiliser un plugin comme Disable REST API, mais il est également possible de le faire manuellement.
Avec un plugin :
- Installez et activez le plugin Disable REST API.
- Allez dans Réglages > Disable REST API.
- Cochez l’option pour désactiver l’API REST.
- Cliquez sur Enregistrer les modifications.
Sans plugin :
- Ajoutez le code suivant à votre fichier
functions.php
:
add_filter('rest_authentication_errors', function($result) {
if (!empty($result)) {
return $result;
}
if (!is_user_logged_in()) {
return new WP_Error('rest_not_logged_in', 'Vous devez être connecté pour accéder à cette API.', array('status' => 401));
}
return $result;
});
Masquer la version de WordPress
Masquer la version de WordPress peut rendre plus difficile pour les hackers de cibler des vulnérabilités spécifiques. Vous pouvez utiliser un plugin comme Hide My WP, mais il est également possible de le faire manuellement.
Avec un plugin :
- Installez et activez le plugin Hide My WP.
- Allez dans Réglages > Hide My WP.
- Cochez l’option pour masquer la version de WordPress.
- Cliquez sur Enregistrer les modifications.
Sans plugin :
- Ajoutez le code suivant à votre fichier
functions.php
:
function remove_version() {
return '';
}
add_filter('the_generator', 'remove_version');
Renforcer la configuration du serveur
Interdire le téléversement de thèmes
Interdire le téléversement de thèmes peut empêcher les utilisateurs de télécharger des thèmes malveillants. Vous pouvez utiliser des règles .htaccess
pour cela. Ajoutez les lignes suivantes à votre fichier .htaccess
:
<FilesMatch "\.(php|php\.)$">
Order Allow,Deny
Deny from all
</FilesMatch>
Interdire les mauvaises requêtes
Utilisez des règles .htaccess
pour interdire les requêtes malveillantes et protéger votre site contre les attaques. Ajoutez les lignes suivantes à votre fichier .htaccess
:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%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>
Masquer les versions PHP
Masquer les versions PHP peut rendre plus difficile pour les hackers de cibler des vulnérabilités spécifiques. Utilisez des règles .htaccess
pour cela. Ajoutez les lignes suivantes à votre fichier .htaccess
:
<IfModule mod_headers.c>
Header unset X-Powered-By
</IfModule>
Les plugins de sécurité : alliés ou ennemis ?
Intérêt des plugins de sécurité
Les plugins de sécurité offrent une protection en temps réel, des scans de vulnérabilités et des pare-feu. Ils sont des alliés précieux pour renforcer la sécurité de votre site.
Comment choisir un bon plugin
Pour choisir un bon plugin de sécurité, prenez en compte sa réputation, ses fonctionnalités et la fréquence de ses mises à jour. Des plugins comme Wordfence et Sucuri sont des choix populaires et fiables.
Les limites des plugins
Les plugins de sécurité ne remplacent pas les bonnes pratiques de sécurité. Ils doivent être utilisés en complément des mesures de base pour offrir une protection optimale. De plus, l’utilisation excessive de plugins peut elle-même être une faille de sécurité, car chaque plugin ajoute une nouvelle couche de code potentiellement vulnérable.
——–
La sécurité WordPress est une priorité absolue pour tout propriétaire de site. En mettant en œuvre les bonnes pratiques et les techniques avancées décrites dans cet article, vous pouvez renforcer la protection de votre site et préserver votre business en ligne. N’oubliez pas que les menaces évoluent constamment, et il est crucial de rester informé et de mettre à jour régulièrement vos mesures de sécurité. Agissez dès maintenant pour protéger votre site et votre entreprise.