15-01-2012, 06:05 PM
(Modification du message : 15-01-2012, 06:07 PM par Sephi-Chan.)
Entièrement d'accord : il faut expliquer pourquoi avant d'expliquer comment.
Tu parles ici de la protection des répertoires. Pourquoi voudrais-t-on protéger l'accès à un répertoire ?
La raison la plus évidente, c'est bien parce qu'il contient des fichiers importants : identifiants de la base de données, scripts de maintenance, scripts cron, etc.
Heureusement, les serveurs Web ont été conçus dans cette optique et ils permettent de définir un site en associant un nom de domaine à un répertoire sur le système de fichier de la machine. Ce répertoire — appelé
Exemple de configuration avec Nginx :
Ainsi, un script situé dans
En revanche, votre application (écrite en PHP, par exemple) pourra accéder aux répertoires sous-jacents.
Imaginons un simple script dont le but est de servir une image aléatoire mais sans permettre de naviguer parmi les images disponibles. Voici une architecture correcte :
Avec un DocumentRoot pointant sur
En revanche, notre script
Tu parles ici de la protection des répertoires. Pourquoi voudrais-t-on protéger l'accès à un répertoire ?
La raison la plus évidente, c'est bien parce qu'il contient des fichiers importants : identifiants de la base de données, scripts de maintenance, scripts cron, etc.
Heureusement, les serveurs Web ont été conçus dans cette optique et ils permettent de définir un site en associant un nom de domaine à un répertoire sur le système de fichier de la machine. Ce répertoire — appelé
DocumentRoot
dans Apache et root
dans Nginx — représente le dossier dans lequel on se trouve lorsque l'on navigue à la racine du nom de domaine indiqué.Exemple de configuration avec Nginx :
server {
listen 80;
server_name jeuweb.org;
root /home/jeuweb/public_html;
index index.php;
}
Ainsi, un script situé dans
/home/jeuweb
n'est pas accessible depuis le Web. Votre serveur Web ne trahira jamais son contenu !En revanche, votre application (écrite en PHP, par exemple) pourra accéder aux répertoires sous-jacents.
Imaginons un simple script dont le but est de servir une image aléatoire mais sans permettre de naviguer parmi les images disponibles. Voici une architecture correcte :
/home/avatar_displayer
├── avatars
│ ├── 1.png
│ ├── 2.png
│ └── 3.png
└── public
└── avatar.php
Avec un DocumentRoot pointant sur
/home/avatar_displayer/public
, l'accès au répertoire /home/avatar_displayer/avatars
est impossible depuis un client HTTP.En revanche, notre script
avatar.php
peut y accéder. Par exemple :
<?php
$filename = mt_rand(1, 3) . ".png";
$filepath = "../avatars/" . $filename;
header('Content-Type: image/png');
header('Content-Disposition: inline');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($filepath));
readfile($filepath);
?>