OVH Cloud OVH Cloud

Apache userdir probleme dossiers

2 réponses
Avatar
Yves Lange
Hello tout le monde,
j'ai mon ptit serveur web Apache 2.0 qui tourne sans problème. J'héberge
deux de mes potes sur mon serveur grâce à la variable userdir. Le
problème c'est que n'importe qui des deux utilisateurs peut remonter à
la racine ou sur tout le serveur web comme ceci (avec un ptit script php):

Code:
<?php
$pointeur = opendir('./../../.phpmyadmin'); // ici on remonte où on
veut, pour l'exemple on va dans le dossier .phpmyadmin
while($q = readdir($pointeur)){
if ($q != "." and $q != ".."){
echo "<a href=index.php?page=".$q.">".$q."</a><br>";
}
}
closedir($pointeur);
?>


J'ai déjà essayé de mettre un fichier htaccess pour bloquer l'accès à la
racine cependant le fichier me bloque la racine ainsi que tout les
sub-dossiers (sous-dossiers). J'ai aussi essayé d'implémenter la
variable Userdir disabled root dans ma configuration apache mais ça ne
change rien. Voici mon dossier sur d: (windows):
d:/online/
d:/online/site # http://xxx.xxx.xxx/ (racine)
d:/online/users
d:/online/users/perso1 # http://xxx.xxx.xxx/~perso1
d:/online/users/perso2 # http://xxx.xxx.xxx/~perso2

Comment faire pour bloquer l'utilisateur dans son dossier uniquement ?
Essayer: .htaccess, blocage des fonctions opendir, fopen, etc... mais
les users ont en besoin !

Merci

2 réponses

Avatar
Olivier Miakinen

j'ai mon ptit serveur web Apache 2.0 qui tourne sans problème. J'héberge
deux de mes potes sur mon serveur grâce à la variable userdir. Le
problème c'est que n'importe qui des deux utilisateurs peut remonter à
la racine ou sur tout le serveur web comme ceci (avec un ptit script php):

Code:
<?php
$pointeur = opendir('./../../.phpmyadmin'); // ici on remonte où on
veut, pour l'exemple on va dans le dossier .phpmyadmin
while($q = readdir($pointeur)){
if ($q != "." and $q != ".."){
echo "<a href=index.php?page=".$q.">".$q."</a><br>";
}
}
closedir($pointeur);
?>

[...]


À moins que tu ne puisses forcer chacun de tes potes à faire un chroot()
au début de chacun de leurs scripts, je ne vois pas bien comment la
réponse pourrait être donnée en PHP. Ce serait plutôt une configuration
du serveur Apache, aussi je te propose d'aller en discuter plutôt sur
<news:fr.comp.infosystemes.www.serveurs>, vers lequel je place le suivi.

Avatar
Florian Sinatra
*Yves Lange* @ 21/02/2006 00:44 :
<?php
$pointeur = opendir('./../../.phpmyadmin'); // ici on remonte où on
veut, pour l'exemple on va dans le dossier .phpmyadmin
while($q = readdir($pointeur)){
if ($q != "." and $q != ".."){
echo "<a href=index.php?page=".$q.">".$q."</a><br>";
}
}
closedir($pointeur);
?>


/* Ceci est la façon correcte de traverser un dossier. */
while (false !== ($file = readdir($handle))) {
echo "$filen";
}

/* Ceci est la MAUVAISE façon de traverser un dossier. (Imaginez un
dossier nommé 0) */
while ($file = readdir($handle)) {
echo "$filen";
}