Apprendre .htaccess : Contrôle d'Accès

Le fichier .htaccess permet de restreindre l'accès à un site web ou à certaines de ses ressources.

Icône de calendrier
Avancé
7 chapitres

Protéger des ressources

Quand on développe un site web dynamique en PHP :

  • Certaines ressources doivent être accessibles publiquement. Ces dernières sont souvent placées dans un dossier 📁 public (telles que des feuilles CSS, des scripts JS, des médias…).
  • D’autres n’ont aucun interêt à l’être, comme le code source de l’application.

L’option Indexes permet de lister tous les fichiers d’un dossier en y accédant via son URL (si ce dernier ne contient pas de fichier 📄 index.php ou 📄 index.html).

Par défaut, cette option est activée.

Si j’accède à l’URL monsite.com/foo, le navigateur listera alors tous les fichiers contenus dans 📁 foo.

📄 fichier1.php
📄 fichier2.php
🖼️ background.svg
...

Il est préférable de désactiver cette option afin de ne pas révéler le contenu de nos dossiers, qui peut rendre vulnérable notre système.

L’extrait htaccess suivant permet la désindexation des fichiers :

.htaccess
copié !
# Empêche de naviguer dans les dossiers du site
Options All -Indexes

Si un visiteur souhaite accéder au contenu d’un dossier via l’URL, il recevra alors une erreur 403.

Les options sont principalement définies pour modifier l’accès aux dossiers. On peut les activer ou les désactiver en les préfixant respectivement par + ou -.

Restreindre l’accès au site web

Il est possible de restreindre l’accès au site à une ou plusieurs adresse(s) IP / nom(s) de domaine.

Cela peut être fait via l’utilisation de la directive Require. Si un visiteur se voit l’accès refusé par notre directive Require, il recevra alors une erreur 403.

.htaccess
copié !
# Restriction à un domaine spécifique avec "host"
Require host monsite.com

# Restriction à une adresse IP spécifique avec "ip"
Require ip 10.252.46.165 100.10.239.4

Le mot-clé not permet d’inverser un critère particulier. Ci-dessous, on interdit l’accès à l’adresse IP 10.252.46.165 :

.htaccess
copié !
<RequireAll>
	Require all granted
	Require not ip 10.252.46.165
</RequireAll>
  • Une directive not doit obligatoirement être située à l’intérieur d’une section <RequireAll>.
  • Require all granted autorise l’accès à tous les domaines / adresse IP. Require all denied interdirait l’accès à tout le monde. Notez qu’il n’est pas possible de spécifier une directive not pour refuser un accès sans écrire préalablement une directive autorisant l’accès.