Protéger un vhost de backoffice Drupal via le .htaccess

Dans le cas d'un serveur "mutualisé"[1]:Pas d'accès aux fichiers de configuration des vhosts mais des .htaccess. [2]

La configuration choisie est la suivante:

Deux VHOSTS pour le même DocumentRoot:

  • backoffice.domaine.com
  • www.domaine.fr

...qui ont tous deux le même document root /var/www/site/html

Principe cette de sécurisation:

Lorsque le HTTP-HOST est backoffice.domaine.com

Une authentification de type BASIC est demandée (elle s'ajoutera à l'authentification Drupal). Ça permet aussi que l'URL du backoffice ne puisse pas être indexée par des bots, elle reste ainsi relativement confidentielle.

Lorsque le HTTP-HOST est www.domaine.com

Pas d'authentification, accès libre, mais le site ne permet pas l'accès aux URL qui devraient être réservées aux contributeurs.

Le .htaccess:

Ajoutez ce premier bloc au début qui permet de ne demander le password que si l'url n'est pas celle du site frontal.

#Authentification pour le backoffice
SetEnvIfNoCase Host www\.domaine\.com frontal
AuthType Basic
AuthName "Authentification requise"
AuthUserFile /var/www/site/.htpasswd
Require valid-user
Order allow,deny
Allow from env=frontal
Satisfy any

Dans le bloc des url rewritting, on ajoute:

#bloquer l'acces aux URL d'admin
RewriteCond %{HTTP_HOST} ^www\.domaine\.com
RewriteCond %{REQUEST_URI} ^/(index\.php|user|admin|users|update|install|flag)
RewriteRule . - [R=403,NC,L]

RewriteCond %{HTTP_HOST} ^www\.domaine\.com
RewriteCond %{REQUEST_URI}  "node/(.*)/edit" 
RewriteRule . - [R=403,NC,L]

Voila. C'est pour Drupal 7, il est possible que pour Drupal 8 les RewriteRule soient à adapter. Et de façon générale, ce principe peut s'appliquer à d'autres CMS pour lesquels l'interface d'édition est mélangée avec l'affichage du site.

Notes

[1] ou d'un dédié sur lequel vous n'avez pas totalement la main

[2] Bien évidemment si vous êtes root c'est plus simple

Page top