Securiser wordpress

WORDPRESS - FAILLES - VULNERABILITÉ

Abdel Aziz

Coté Utilisateurs:
1. Utiliser une méthode de double authentification de type PasswordLess.
2. Choisisser des mots de passe forts et des noms d utilisateurs difficiles à deviner;
3. Limiter le nombre de mauvaises tentatives de connexion: Pour cela installer l'extension (plugin) Limit Login Attemps via l'accès admin. Les paramètres sont personnalisableS dans la page d’options du plugin.;
4. Utiliser un Captcha sur la page de login afin d' empêcher les robots de réaliser des tentatives de connection sur votre site, le rendant ainsi imperméable à leurs tests.
5. Déplacer la page de login: En déplaçant la page de connexion, les robots ne pourront pas faire de tentatives de connexions;
6. Vérifier la liste de vos utilisateurs et supprimez les comptes obsolètes.
7. Cacher l’accès au profil Admin. Pour cela, ne jamais appeler le profil « admin ».
8. Modifier le slug / nicename de son auteur, ce qui donne une double protection puisque les pirates seront dans l'obligation de rechercher l'identifiant en plus du mot de passe.

Coté Plugins & Thèmes:
1. Mettre à jour les plugins utilisés et supprimer les plugins désactivés;
2. Mettre à jour les thèmes utilisés et supprimer les thèmes non utilisés;
3. Désactiver l’éditeur de fichiers des plugins et thèmes. Cette ligne de code désactive cet éditeur natif et est à placer dans votre fichier wp-config.php :

define('DISALLOW_FILE_EDIT', true);

4. Installer uniquement les plugins du dépôt, ou pour les plugins premium, passer par un FTP sécurisé.

Au coeur de WordPress:
1. Mettre à jour WordPress;
2. Autoriser les mises à jour mineures automatique;
3. Modifier le préfixe de la base de données wp_ : Quand une faille de type SQL Injection est exploitée, l’attaquant a le plus souvent besoin de cibler vos tables, et visent celles dont il connait le prefixe. Ne jamais utiliser wp_ ni wordpress_ en préfixe de base de données.

4. Désactiver l'API REST: Ouvrez votre fichier functions.php dans votre thème et ajoutez ces lignes :

< ?php 

	// Disable REST API 

	remove_action( 'init',          'rest_api_init' );
	remove_action( 'parse_request', 'rest_api_loaded' );

	remove_action( 'xmlrpc_rsd_apis',            'rest_output_rsd' );
	remove_action( 'wp_head',                    'rest_output_link_wp_head' );
	remove_action( 'template_redirect',          'rest_output_link_header', 11 );
	remove_action( 'auth_cookie_malformed',      'rest_cookie_collect_status' );
	remove_action( 'auth_cookie_expired',        'rest_cookie_collect_status' );
	remove_action( 'auth_cookie_bad_username',   'rest_cookie_collect_status' );
	remove_action( 'auth_cookie_bad_hash',       'rest_cookie_collect_status' );
	remove_action( 'auth_cookie_valid',          'rest_cookie_collect_status' );

	add_filter( 'rest_enabled',       '__return_false' );
	add_filter( 'rest_jsonp_enabled', '__return_false' );

5. Désactiver XML-RPC: Pour cela, ajouter ces lignes dans functions.php :

< ?php 

	add_filter( 'xmlrpc_enabled', '__return_false' );
	remove_action( 'wp_head', 'rsd_link' );

Voici un code alternatif qui laisse l’API ouverte mais réservée seulement aux utilisateurs connectés :

< ?php 

function secure_API( $access ) {

	if( ! is_user_logged_in() ) {
        return new WP_Error( 'rest_cannot_access', __( 'Accès réservé aux personnes authentifiées', 'disable-json-api' ), array( 'status' => rest_authorization_required_code() ) );
    }

    return $access;
}
add_filter( 'rest_authentication_errors', 'secure_API' );

Coté données sensibles:
Empêcher la lecture du contenu des dossiers: Il vous faut ajouter un fichier .htaccess (si vous êtes sous Apache) avec le code suivant :

< IfModule mod_autoindex.c >
    Options -Indexes
< /IfModule >

forcer des options sur certaines valeurs:
1. Forcer une adresse email admin. En forçant cette valeur avec une adresse email en dur, vous vous assurez de toujours recevoir les mails important en relation avec WordPress.
2. Forcer le rôle par défaut sur Abonné. Si je veux qu’un de mes abonnés soit Administrateur, j’irais le mettre manuellement.
Pour tout ça, copiez/collez le code suivant dans un fichier php de votre création, et déposez le dans le dossier « /wp-content/mu-plugins », créez le s’il n’existe pas encore. N’oubliez pas de modifier le mail dans le code.

< ?php

// Forcer l'adresse email admin
add_filter( 'option_admin_email', '_option_admin_email' );
function _option_admin_email( $value ) {
	return 'votre@email.fr'; // valeur à modifier
}

// Forcer le rôle par défaut sur "Abonné"
add_filter( 'pre_option_default_role', 'baw_option_default_role' );
function baw_option_default_role( $value ) {
    return 'subscriber';
}