Certain diront que cacher un back office ne sert pas à grand chose mais si vous vous êtes un jour intéressé à ce qui se passe sur votre site internet alors vous n'êtes peut-être pas de cet avis.

Pourquoi cacher le back office de WordPress

Pour la petite histoire, il y a quelques années, je me suis fait piraté un de mes sites web, un petit site en français peu visité, le pirate avait remplacé le site par une page avec un drapeau turc et une musique que j'imagine turque. Je me suis alors plongé dans les logs du site web pour essayer de comprendre comment le pirate est arrivé à ses fins.

J'ai découvert une multitude de visiteurs pour une majorité légitime mais je remarquais surtout une quantité non négligeable de visites douteuses. Des visiteurs étrangers pour la plupart qui cherche des urls qui n'existent pas, qui remplace les paramètres d'url, bref qui cherchent à exploiter une faille. Ces visites ne se limitaient pas à mon ami turc, ces visites semblaient même pour certaine totalement automatisées aux vues des timings très raccourcis.

Ce piratage a été une très bonne leçon pour moi, il m'a sensibilisé très concrètement à la sécurité de mes développements et il m'a incité à me protéger des robots autant que possible. Sur les sites disposant d'un back office connu facilement accessible, il y a des robots malveillant qui passent dessus tous les jours, ils tentent de cracker les mots de passe, ils tentent de trouver une faille.

Depuis ces découvertes, j'ai tendance à cacher le back office de mes sites, pour éviter les essaies de mot de passe, les recherches de vulnérabilité et tout simplement écarter un trafic, et donc le chargement de ressources, inutile.

Principe de fonctionnement

Le principe est simple, obliger le visiteur à avoir un cookie "sésame" pour afficher le back office sinon le serveur retourne une erreur 404 faisant croire qu'il n'y a pas de back office.

Le visiteur légitime accède à une page PHP que lui seul connait, cette page lui ajoute un cookie particulier et le redirige vers le back office. Une fois sur le back office, Apache reconnait le cookie dont il a besoin et ainsi lui donne accès au back office, sans le cookie il renvoit une erreur 404.

Par exemple, essayez d'aller sur le back office de ce présent blog WordPress. Je n'ai pas changé la configuration de WordPress, le back office existe bien mais apache n'a pas trouvé le cookie "sésame" sur votre machine, donc vous avez une erreur 404.

Installer la protection

Il convient dans un premier temps de configurer Apache pour autoriser l'accès au back office uniquement en présence du cookie "sésame".

Vous pouvez ajouter ce bout de code dans le fichier htaccess qui accompagne votre installation WordPress ou directement dans la configuration d'Apache. Veillez à ce que ces lignes soient positionnées après la directive RewriteEngine On, il faudra l'ajouter si elle n'est pas présente. Remplacez le nom du cookie "cookie-sesame" par un nom de cookie que vous aurez choisi, compliqué à deviner, soyez créatif !

# 404 sur le BO WordPress si le cookie n'est pas présent
RewriteCond %{HTTP_COOKIE} !^.cookie-sesame.$ [NC]
RewriteRule ^wp-login.php - [r=404,NC,L]
RewriteCond %{HTTP_COOKIE} !^.cookie-sesame.$ [NC]
RewriteRule ^wp-admin/ - [r=404,NC,L]

Désormais, si vous essayez d'aller sur le back office, vous devez avoir une erreur 404.

Maintenant, il faut créer une page PHP qui va vous permettre de créer le cookie dont vous avez besoin pour vous connecter. Le nom de cette page doit être difficilement devinable, par exemple acces-2022-au-bo-svp-merci.php encore une fois soyez créatif ! Cette page pourra être ajoutée à vos favoris par la suite.

Voici le code PHP que vous pouvez utiliser pour créer un cookie et rediriger vers le BO, en adaptant le nom du cookie avec celui que vous aurez choisi.

// cookie nécessaire pour accéder à l'admin
$sesame_cookie = array (
	'expires' => time()+(60*60*24),
	'path' => '/',
	'domain' => '.votre-nom-de-domaine.fr',
	'secure' => true,
	'httponly' => true,
	'samesite' => 'Strict'
);
@setcookie('cookie-sesame', 'need4identity', $sesame_cookie);
// redirection
header('Location: wp-admin/');

Maintenant, si vous allez sur votre page PHP, elle doit vous rediriger vers le back office qui doit être parfaitement accessible.

Aller plus loin

S'il est question dans cet article de WordPress, le principe fonctionne pour n'importe quel back office.

J'utilise également cette méthode du cookie pour cacher les images et documents que je ne souhaite pas voir indexés par les moteurs de recherche. Les robots ne récoltent pas les cookies en général, il est possible avec cette méthode de conditionner l'affichage d'une photo (ou autre) à la présence d'un cookie. C'est le cas pour ma photo présente sur la page d'accueil et ainsi elle n'est pas indexée par Google par exemple.

Partager cette publication :

Cette publication peut aussi vous intéresser

Laisser un commentaire

Votre courriel ne sera pas publié, les champs obligatoires sont indiqués par un astérisque *.

*
*
*