Apprendre .htaccess : Contrôle d'Accès
Le fichier .htaccess permet de restreindre l'accès à un site web ou à certaines de ses ressources.
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 :
# 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
.
# 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
:
<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 directivenot
pour refuser un accès sans écrire préalablement une directive autorisant l’accès.