IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Bloquer l'accés aux sous-répertoires


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de kanaziwok
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 105
    Points : 52
    Points
    52
    Par défaut Bloquer l'accés aux sous-répertoires
    Bonjour à tous,

    J'aimerais savoir s'il est possible de bloquer l'accés à un fichier .php aux sous-dossier.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    / // Racine du site
    /Dossier1 // Un dossier
    /Dossier1/Dossier2 // Un dossier dans le dossier 1 qui contient un site
    Avec cet exemple, je voudrais bloquer l'accés de tous les fichiers du Dossier2 à la racine du site.

    J'ai regardé sur internet mais j'ai pas trouvé grand chose.

    Merci de votre aide.

    Cordialement,

    KaNa.

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    As tu regardé dans le manuel ici dans la partie 'Sécurité'. Tu vas dans 'sécurité des fichiers' ou 'masquer Php'.

    Sinon, il existe pleins de solutions pour éviter l'accés aux fichiers, si tu ne trouves pas ton bonheur, je pourais te donner la mienne (mais elle n'est peut être ppas la plus évidente).
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  3. #3
    Membre du Club Avatar de kanaziwok
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 105
    Points : 52
    Points
    52
    Par défaut
    Merci de ta réponse,

    Est-ce que quelque chose de ce genre conviendrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    if($_SERVER['SCRIPT_FILENAME']!="racine/fichierdelaracine.php") die('Accés refusé');
    ?>
    Ou il faut faire quelque chose de moins simple ?
    Parce que avec cette solution il faut que je mette ce bout de code sur chaque page en modifiant racine/fichierdelaracine.php" pour chaque fichier.

  4. #4
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    En fait, ça c une solution sur l'application et quand tu utilises celle ci (et je dis pas que c la plus simple ou la plus compliqué) celà ressemble un peu à une usine à gaz (mais ça marche).

    Donc c bon, mais tu peux éviter de mettre les chemins en dur en utilisant une table de la Bdd spéciale pour tous les accés des pages de ton application

    Par contre, à chaque page php même procédé
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  5. #5
    Membre du Club Avatar de kanaziwok
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 105
    Points : 52
    Points
    52
    Par défaut
    Merci, et sinon peut on mettre un fichier dans le Dossier1 qui bloque toute possibilité de lire ce qu'il y a la racine par les fichiers des sous dossiers ?

  6. #6
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Là c différent, tu peux utiliser le fichier 'htaccess' pour Apache ...
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  7. #7
    Membre du Club Avatar de kanaziwok
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 105
    Points : 52
    Points
    52
    Par défaut
    oui j'avais regardé du côté de.Httacces mais j'avais pas trouver la marche a suivre pour mon probleme.
    Si tu pouvais m'aider.
    Merci

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Il suffit de poser, dans le repertoire dont tu veux interdire l'accès, un fichier nommé .htaccess (pas Httacces) contenant la simple ligne :
    Pourfendeur de singletons en croisade

  9. #9
    Membre du Club Avatar de kanaziwok
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 105
    Points : 52
    Points
    52
    Par défaut
    Oui mais dans ce cas les fichiers qui sont dans les sous dossiers de Dossier1 ne seront plus accessible eux non plus .

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Serait-il possible d'être plus précis ? Avec un exemple (qui doit avoir accès à quoi ou non). Parce qu'il faudrait déjà déterminer à quel niveau se doit être fait : HTTP (donc Apache voir PHP) ou au niveau du système [de fichiers] (mais là ça dépend entièrement de votre système, de l'environnement PHP et de ce vous pouvez faire : (re)définition de l'open_basedir ?).

    Parce que de ce que j'ai compris, on est dans le second cas donc un htaccess ne serait pas la solution. Et un contrôle en PHP de l'appelant sur le script qui n'est pas censé être appelé ça peut être aisément bypassé.

  11. #11
    Membre du Club Avatar de kanaziwok
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 105
    Points : 52
    Points
    52
    Par défaut
    Voilà les fichiers présent dans mon FTP par exemple :


    Avec cet exemple, je souhaite que tous les fichiers .php présent dans les dossiers SsDossier ne puissent pas accéder aux fichiers .php présent à la racine du site.
    En gros ici /Dossier/SsDossier3/test.php ne peut pas accéder à /test.php
    ni à /config.php etc ...
    Et je souhaite que cela soit valable pour tous les fichiers présent dans tous les sous dossier de /Dossier .

    Je vous remercie de votre aide.

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    A moins d'être sur un système Unixoïde et d'avoir une configuration de PHP permettant d'exécuter ces scripts sous des utilisateurs différents afin de reposer sur les droits des fichiers, je ne vois que la redéfinition d'open_basedir pour chacun de ces répertoires. Donc si PHP est installé comme module par Apache, il faudrait écrire ce genre de choses dans le fichier de configuration d'Apache :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Directory ".../Dossier/SsDossier/">
        php_admin_value open_basedir ".../Dossier/SsDossier/" # + éventuellement les autres répertoires où il doit accéder
    </Directory>
    Tout dépend également du niveau précis d'isolation cherché.

  13. #13
    Membre du Club Avatar de kanaziwok
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 105
    Points : 52
    Points
    52
    Par défaut
    Je compte prendre mon hébergement chez https://www.mavenhosting.com/ .

    Pourrais-je faire cette méthode ?
    A moins d'être sur un système Unixoïde et d'avoir une configuration de PHP permettant d'exécuter ces scripts sous des utilisateurs différents afin de reposer sur les droits des fichiers

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Si ce n'est pas du dédié (= c'est vous qui mettez et gérez en place l'environnement) : non.

  15. #15
    Membre du Club Avatar de kanaziwok
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 105
    Points : 52
    Points
    52
    Par défaut
    Ok, sauf que le problème avec cette solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Directory ".../Dossier/SsDossier/">
        php_admin_value open_basedir ".../Dossier/SsDossier/" # + éventuellement les autres répertoires où il doit accéder
    </Directory>
    C'est que je ne peux pas le faire via un script PHP ...
    Il faudrait que je le fasse en ssh manuellement, alors que je voudrais que à chaque SsDossier créés cela ce fasse automatiquement.
    De plus cette méthode implique un redémarrage de apache pour prendre en compte les modifications de httpd.conf
    Pas de solutions à mon problème alors ?

  16. #16
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    A moins de créer un fichier .htaccess inaltérable (question d'utilisateur/droit - écriture - implique donc l'usage d'au moins deux comptes système) où vous définissez l'open_basedir, je ne vois pas trop comment automatiser au niveau local (requiert une version >= 5.3.0 et PHP en module Apache). Ce qui leur restreindrait, de facto, l'utilisation de fichier .htaccess à la "racine" de ces sous-dossiers.

    Ah, si, toujours en dédié, il est possible de jouer avec des inclusions au niveau d'Apache (requiert une version >= 2.0.41). Vous pouvez ainsi créer un nouveau fichier de configuration à part où mettre ces blocs Directory. C'est simple mais il faut que ce soit réalisé proprement (droits, pas d'écrasement) et demande un redémarrage d'Apache.

  17. #17
    Membre du Club Avatar de kanaziwok
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 105
    Points : 52
    Points
    52
    Par défaut
    Merci à toi pour ces réponses.

    En gros ce qu'il faut que je fasse, c'est mettre un fichier .htaccess à la racine de chaque sous dossier avec comme contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php_value open_basedir chemin/
    Et mettre ces fichiers juste en chmod 755.

    Mais je ne vois pas pourquoi cette méthode peut présenter un risque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(realpath($_SERVER['SCRIPT_FILENAME'])!=__FILE__) die('Accés refusé');

  18. #18
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par kanaziwok Voir le message
    Et mettre ces fichiers juste en chmod 755.
    Oui mais d'utilisateurs différents : le .htaccess doit appartenir à un autre utilisateur que celui sous lequel PHP est exécuté ou attribué lors de la connexion en FTP. Sinon, il est modifiable.

    Citation Envoyé par kanaziwok Voir le message
    Mais je ne vois pas pourquoi cette méthode peut présenter un risque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(realpath($_SERVER['SCRIPT_FILENAME'])!=__FILE__) die('Accés refusé');
    La variable $_SERVER n'est pas en lecture seule donc est modifiable - il suffit de la réaliser avant - (suhosin ne le tolère peut être pas). Sinon il faudrait se tourner vers les variables d'environnement (getenv/putenv) mais, une lecture du fichier (file_get_contents) suivie d'une suppression de la vérification (preg_replace par exemple) et enfin un eval permettront d'émuler une inclusion tout en bypassant cette vérification. Une lecture du script, en tant que fichier texte, n'étant nullement prohibée (point d'interprétation).

  19. #19
    Membre du Club Avatar de kanaziwok
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 105
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par julp Voir le message
    Oui mais d'utilisateurs différents : le .htaccess doit appartenir à un autre utilisateur que celui sous lequel PHP est exécuté ou attribué lors de la connexion en FTP. Sinon, il est modifiable.
    Je ne comprend pas trop là .
    Qu'entends tu par "autre utilisateur" ?

  20. #20
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Un autre utilisateur système, simple question de droits. Si vous utilisez le même que votre compte FTP ou Apache, il sera libre d'éditer le .htaccess donc de supprimer/modifier la restriction open_basedir que vous cherchez à imposer.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/08/2009, 16h56
  2. Réponses: 12
    Dernier message: 11/11/2008, 10h14
  3. Logs des Accès aux Sous-Repertoires
    Par cirano dans le forum Apache
    Réponses: 2
    Dernier message: 04/02/2008, 16h27
  4. ArrayList : Acces aux sous-elements
    Par Laeticia dans le forum C#
    Réponses: 5
    Dernier message: 26/04/2007, 10h51
  5. Réponses: 6
    Dernier message: 07/01/2007, 15h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo