Protéger un répertoire avec PHP

Bonjour,
je suis en train d’implémenter vos scripts « Espace Membres » sur ma page web existante.
Pour ce faire, j’ai créé un répertoire « members » à la racine de mon site, répertoire dans lequel je place les différents fichiers et répertoires nécessaires à la création de l’espace membres.
Ma question est la suivante, comment doit-on gérer les permission du répertoire « members » (et les sous-répertoires et fichiers) pour que l’on ne puisse pas se balader n’importe où dans arborescence mais n’utiliser que le fichier login.php ?
Merci d’avance. Cordialement

La directive open_basedir fait exactement cela :

Limiter les fichiers qui peuvent être ouverts par PHP à l’arborescence spécifiée, y compris le fichier lui-même.

Mettez .htaccess dans ce dossier, et ajoutez

Deny from all

Si vous voulez appliquer la directive dynamiquement au dossier (dans le cas où vous avez accès à la configuration d’Apache). Exemple :

<DirectoryMatch "^/public_html/espace/members/documents/(.+)/" >
    Order Allow,Deny
    Deny from all
</DirectoryMatch>

Merci Isaac, mais, débutant, je ne tiens pas trop à aller « bricoler » le php.ini :slight_smile:

Merci Jacques. C’était mon idée première, utiliser .htaccess. Si je mets le htaccess avec « deny from all » dans le répertoire mon_site/members, effectivement on ne peux plus se balader dans le répertoire mon_site/members mais même le fait de vouloir exécuter mon_site/members/login.php, ça ne fonctionne plus du tout et j’obtiens:

Forbidden

You don’t have permission to access this resource.
Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.

Je pense que le dossier members ne contient pas des fichiers sensibles, du coup il ne doit pas inclure le fichiers .htaccess.

L’utilisateur peut accéder à ces fichiers:

arch

Par exemple vous pouvez l’ajouter dans le dossier racine mon_site/ ou dans des sous-dossiers par exemple mon_site/members/sous-dossier/, ne l’ajouter pas dans le dossier qui contient les fichiers accessible par l’utilisateur.

Merci pour votre réponse. Le fichier config.php me semble sensible puisqu’il contient ‹ DB_SERVER ›, ‹ DB_USERNAME ›, ‹ DB_PASSWORD › et ‹ DB_NAME ›, non ? avec ces infos on peut tout casser, ne pensez-vous pas ?

Oui, vous avez raison, vous pouvez l’isoler dans un dossier et y inclure dans les autres scripts comme ceci:

include(dirname(__FILE__).'/conf/config.php');

dirname(__FILE__) renvoie le répertoire du fichier contenant le code en cours d’exécution.

Et comme ça, dans le dossier conf vous mettez le fichiers .htaccess.

Merci Jacques ! C’est nickel comme ça :slight_smile:
Par contre il y a un bug sur add_user.php… Si on appelle ce script via son url, on peut alors ajouter des utilisateurs à la BDD sans se connecter en tant qu’Admin, ce qui n’est pas vraiment souhaitable.
Il faut tester dans add_user.php qu’il y a bien eu une connexion d’un admin. J’ai ajouté ça dans ce script:

session_start();
	if (!isset($_SESSION['userRights']) or $_SESSION['userRights'] !== 'admin') {
	header('Location: ../login.php');
	die;
}

et $_SESSION['userRights'] = 'admin'; dans login.php si un admin s’identifie.

ça peut aider d’autres personnes :wink:

Merci encore ! :slight_smile: