Page cover

🔐TD 13: Les secrets du htaccess

Introduction aux fichiers .htaccess

OBJECTIF

Protéger l'accès à votre dossier admin et par extension aux pages d'administration de votre site et de votre base de données.

PREAMBULE

Comme nous l'avons déjà évoqué en cours d'hébergement, les fichiers .htaccess d'Apache fournissent des méthodes de configuration au niveau de chaque dossier de votre site. Ils peuvent servir à protéger l'accès à un dossier, mais aussi à modifier le comportement de votre site en remplaçant la configuration d'Apache dans le répertoire ou se trouve le fichier .htaccess

IMPORTANT : N'oubliez pas le . devant .htaccess. Le . est l'équivalent de l'attribut caché sur les systèmes Linux.

PARTIE 1 - PROTECTION DU DOSSIER admin

CONFIGURATION APACHE

Pour commencer, nous allons déjà vérifier que votre site est configuré pour prendre en compte les fichiers .htaccess. La directive AllowOverride doit être active dans la configuration de votre site . Editez votre fichier /etc/apache2/sites-available/003-sae203.conf et ajoutez le bloc <Directory> comme ci-dessous :

<VirtualHost *:80>
	<FilesMatch .php$>
   	SetHandler "proxy:unix:/var/run/php/php8.1-fpm.sock|fcgi://localhost"
   	</FilesMatch>

	ServerName MMI.sae203.ovh
	ServerAdmin [email protected]
	DocumentRoot /var/www/sae203
	DirectoryIndex index.php
	
	<Directory /var/www/sae203/admin>
	Options -Indexes
   	AllowOverride All
	</Directory>
	
	ErrorLog ${APACHE_LOG_DIR}/error.log
   	CustomLog ${APACHE_LOG_DIR}/access.log combined
 </VirtualHost>

ATTENTION : Si vous avez activé SSL (HTTPS),

il faut aussi modifier le fichier 003-sae203-le-ssl.conf

Ensuite relancez Apache avec la commande : systemctl reload apache2

CREATION DU FICHIER .htaccess

Nous pouvons maintenant, créer notre fichier .htaccess dans le dossier /var/www/sae203/admin

AuthName "Protection du CRUD sae203"
AuthType Basic
AuthUserFile "/home/MMI/htpassword.mmi"
Require valid-user

Remarquez que nous utilisons ici le même fichier de mots de passe que votre site de travail : htpassword.mmi L' accès à votre dossier sera donc protégé par votre identifiant MMI et le mot de passe associé

Quelques Explications sur le contenu du fichier :

  • AuthName : C'est le message qui sera affiché pour demander l'authentification

  • AuthType Basic : Authentification Simple par Login/MotDePasse

  • AuthUserFile : Fichier des Mots de Passe

  • Require valid-user : Oblige l'utilisateur à s'authentifier pour accéder au dossier protégé

LE FICHIER htpassword.mmi

Ce fichier se trouve dans le dossier de votre utilisateur /home/MMI Il contient les empreintes des mots de passe utilisés pour protéger votre dossier travaux, et donc maintenant votre dossier admin. Si vous l'ouvrez, vous devriez voir quelque chose qui ressemble à ceci :

prof:$apd12$xkEugZrD$QLS9dnYE2IX7qXEgYvnKT0
mmi21x43:$apd12$m1uR6Zeu$EDVIG6suKB0zZRuBS6R.18

Ne tenez pas compte des valeurs, ce ne sont que des exemples

Ces empreintes sont générées à l'aide de la commande : htpasswd Si vous voulez modifier un mot de passe , ou ajoutez un nouvel utilisateur, utilisez la syntaxe suivante :

htpasswd -b /home/MMI/htpassword.mmi UTILISATEUR MOTDEPASSE

ATTENTION : Ne changez pas et ne supprimez pas le mot de passe de l'utilisateur prof !! Vous empêcheriez les enseignants accéder à vos pages et seriez pénalisés

ACCES A VOTRE PAGE D'ADMINISTRATION :

Votre dossier étant maintenant protégé, vous devriez pouvoir y accéder avec l'URL : MMI.sae203.ovh/admin/admin.php et vous identifier avec MMI et le mot de passe associé.

Authentification htaccess

PARTIE 2 - COMPLEMENT du HTACCESS

LA PAGE admin.php par défaut

Comme indiqué au début de cours, le fichier .htaccess ne sert pas qu'à la protection des dossiers. Il peut aussi servir à reconfigurer le comportement d'Apache pour le dossier dans lequel il est présent.

Vous avez du remarquer que vous êtes obliger de préciser la page à ouvrir (admin.php). Si vous n'indiquez que le dossier /admin, vous obtiendrez immédiatement un beau Forbidden du à la ligne Options -Indexes de votre fichier de configuration. Une sécurité supplémentaire qui évite que l'on puisse voir le nom de votre page d'administration, mais une contrainte pour vous et l'écriture de vos liens vers cette page.

Pour régler ce petit souci, il suffit d'utiliser une Directive que vous connaissez déjà : DirectoryIndex Editez votre fichier .htaccess et ajoutez la ligne suivante :

DirectoryIndex admin.php

Ouvrez de nouveau votre navigateur avec l'URL : MMI.sae203.ovh/admin (sans préciser la page) Plus de Forbidden, mais directement votre page admin.php qui est donc reconnue comme la page par défaut pour le dossier /admin.

DESACTIVATION DES ERREURS PHP

Un autre usage des fichiers .htaccess est la reconfiguration de php. Prenons un exemple simple : L'affichage des erreurs PHP (Display_errors) . Si il est en effet très pratique d'afficher les erreurs pendant la phase de développement, cela peut devenir rapidement gênant sur un serveur en production.

Vous avez du voir pendant la réalisation de votre site de nombreuses erreurs qui affichaient le nom des pages, des fonctions, voir même le nom de la base de données et de l'utilisateur associé ; autant d'informations qui pourraient être exploitées pour pirater votre site et vos données.

Nous pourrions, bien sur, remettre à Off l'option Display_errors du fichier php.ini, mais il serait désactiver pour tous les sites, même quand vous voulez débugger votre premier déploiement. Encore une fois, le fichier .htaccess peut vous aider.

DEMONSTRATION :

A l'aide nano, éditez directement votre page admin.php sur votre serveur et ajoutez n'importe quoi derrière le premier <?php que vous trouvez pour provoquer une erreur. Rechargez la page pour constater qu'il y a bien une erreur PHP d'affichée. Par Exemple :

Parse error: syntax error, unexpected identifier "kkkk", expecting "," or ";" in /var/www/sae203/admin/admin.php on line 3

Maintenant, éditez votre fichier .htaccess et ajouter la ligne suivante :

SetEnv PHP_VALUE "display_errors = Off"

Rechargez la page, les erreurs ne s'affichent plus. En fonction de votre navigateur vous obtiendrez une page blanche ou une erreur 500, mais plus aucune information confidentielle n'apparaitra ce qui est le plus important.

IMPORTANT : N'oubliez de corriger l'erreur dans votre page admin.php avant de continuer et vérifiez que votre page fonctionne de nouveau

REECRITURE DES URLs

Un autre usage du fichier .htaccess que vous rencontrerez souvent, surtout avec les frameworks ou les CMS comme Wordpress par exemple est la réécriture des URLs ; une autre façon de cacher le nom des pages et les arguments qui pourraient être passés dans l'URL. Par Exemple, au lieu d'écrire :

  • /admin/table1_gestion.php vous pourriez utiliser simplement /admin/albums

  • /admin/table2_gestion.php deviendrait alors /admin/auteurs

Essayons de mettre cela en place dans notre fichier .htaccess. Il faut dans un premier temps activer le module rewrite d'Apache (qui est déjà installé sur vos VPS) Puis écrire une règle de réécriture pour chacune des URLs à rediriger. Avec notre exemple, cela donnerait :

RewriteEngine On
RewriteRule albums /var/www/sae203/admin/table1_gestion.php
RewriteRule auteurs /var/www/sae203/admin/table2_gestion.php

Ajoutez ces lignes à votre fichier .htaccess en les modifiant pour les adapter à votre site. Testez avec les URLs (en les adaptant):

  • MMI.sae203.ovh/admin/albums

  • MMI.sae203.ovh/admin/auteurs

CONCLUSION

Les autres possibilités d'usage du fichier .htaccess sont nombreuses et un cours entier ne suffirait pas à toutes les démontrer. Vous aurez surement l'occasion à de nombreuses reprises de revoir les concepts abordés dans ce cours.

Toutefois avant de conclure, il est important de bien comprendre que l'usage des fichiers .htaccess n'est pas l'unique façon de protéger ou de configurer l'accès à un dossier. Ce n'est d'ailleurs pas non plus la meilleure, ni en terme de sécurité, ni en terme de performances.

L'usage de ces fichiers , s'il est en effet incontournable sur des hébergements ou vous n'avez pas accès à la configuration d'Apache, ce n'est pas le cas sur un VPS ou un serveur dédié que vous pouvez administrer. Il est bien plus intéressant et sécurisant de mettre les directives du fichier .htaccess dans le fichier de configuration du site entre les balises et du dossier que l'on souhaite gérer, surtout sur un site de production.

IMPORTANT : Pour les besoins de la sae et pour faciliter la notation de votre travail, nous vérifierons le fichier .htaccess, donc ne modifiez rien de plus dans votre fichier de configuration. Rien ne vous empéchera d'utiliser ces concepts dans un prochain projet.

Dernière mise à jour