Include de fichier au-dessus de la racine
Résolu/Fermé
ephelya
Messages postés
289
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
-
2 juil. 2013 à 17:07
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 - 7 oct. 2013 à 12:46
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 - 7 oct. 2013 à 12:46
A voir également:
- Include de fichier au-dessus de la racine
- Fichier rar - Guide
- Fichier host - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier iso - Guide
- Ouvrir fichier .bin - Guide
7 réponses
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
2 juil. 2013 à 18:01
2 juil. 2013 à 18:01
Salut,
D'ou est ce que vous appellez le fichier "fichier.php", or, a quel niveau l'inclusion est faite ?
Ou se trouve "fichier.php" ?
D'ou est ce que vous appellez le fichier "fichier.php", or, a quel niveau l'inclusion est faite ?
Ou se trouve "fichier.php" ?
ephelya
Messages postés
289
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
2
2 juil. 2013 à 19:11
2 juil. 2013 à 19:11
Voici mon arborescence sur le serveur
- www
-----global.css
-----WWW
----------SITES
--------------monsite1
------------------index.php
------------------fichier.php
J'ai besoin d'appeler global.css depuis fichier.php ou index.php, mais une fois que tout est en place, j'ajoute le nom de domaine monnomdedomaine.com qui pointe vers monsite1 et là les liens ../../../global.css ne fonctionnent plus. Ca me semble normal, mais comment fait-on pour contourner le problème ?.
- www
-----global.css
-----WWW
----------SITES
--------------monsite1
------------------index.php
------------------fichier.php
J'ai besoin d'appeler global.css depuis fichier.php ou index.php, mais une fois que tout est en place, j'ajoute le nom de domaine monnomdedomaine.com qui pointe vers monsite1 et là les liens ../../../global.css ne fonctionnent plus. Ca me semble normal, mais comment fait-on pour contourner le problème ?.
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
Modifié par JooS le 3/07/2013 à 14:33
Modifié par JooS le 3/07/2013 à 14:33
Salut,
Si votre domaine pointe sur la racine, alors je doute que les liens qui pointe vers des répertoire de plus haut niveau fonctionnent !
La racine du site est le niveau le plus haut qui puisse être accessible.
Si votre domaine pointe sur la racine, alors je doute que les liens qui pointe vers des répertoire de plus haut niveau fonctionnent !
La racine du site est le niveau le plus haut qui puisse être accessible.
ephelya
Messages postés
289
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
2
Modifié par ephelya le 3/07/2013 à 15:34
Modifié par ephelya le 3/07/2013 à 15:34
Je ne m'attendais pas à ce que include ('../../../global.css') fonctionne, mais j'ai consulté plusieurs amis développeurs confirmés avant de me lancer dans ce projet qui m'ont assuré qu'on pouvait accéder à un fichier au-dessus de la racine.
C'est peut-être en traitant le fichier comme un fichier distant, je ne sais pas, mais ça me fait un peu peur coté sécurité de modifier allow_url_include dans php.ini (d'ailleurs je ne sais même pas si mon hébergeur me le permettra), donc je cherche un autre moyen.
Pour le moment, je me contente de récupérer le contenu du fichier avec file_gets_content et de créer un nouveau fichier dans monsite1 en recopiant le contenu, mais ça charge du coup le serveur, et ce n'est pas le but, pour un ou deux sites, ça passe, mais pour quelques centaines, ça va vite devenir problématique...
C'est peut-être en traitant le fichier comme un fichier distant, je ne sais pas, mais ça me fait un peu peur coté sécurité de modifier allow_url_include dans php.ini (d'ailleurs je ne sais même pas si mon hébergeur me le permettra), donc je cherche un autre moyen.
Pour le moment, je me contente de récupérer le contenu du fichier avec file_gets_content et de créer un nouveau fichier dans monsite1 en recopiant le contenu, mais ça charge du coup le serveur, et ce n'est pas le but, pour un ou deux sites, ça passe, mais pour quelques centaines, ça va vite devenir problématique...
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
Modifié par JooS le 3/07/2013 à 16:53
Modifié par JooS le 3/07/2013 à 16:53
Ah ok, désolé, j'ai vu CSS donc j'ai imaginer que tu appelais le fichier via la balise link.
Essaye de mettre ceci avant le include !
Essaye de mettre ceci avant le include !
ini_set('open_basedir', '/www');
Salut,
En php tu peux faire un include sur n'importe quel fichier de ton serveur. Donc un include('../../../global.css') devrait fonctionner à condition que le chemin soit bon et que apache ait les droits de lecture sur ce fichier.
Par contre en html tu ne peux pas appeler des fichiers qui ne sont pas accessible depuis internet (ce qui semble être le cas de ton global.css).
De plus puisque tu arrives à faire un file_get_content, tu devrais pouvoir faire un include de la même manière. Par exemple dans la balise head de ton fichier html tu peux faire :
Bien vérifier les chemins absolus en fonction de la page appelée.
Bonne journée
En php tu peux faire un include sur n'importe quel fichier de ton serveur. Donc un include('../../../global.css') devrait fonctionner à condition que le chemin soit bon et que apache ait les droits de lecture sur ce fichier.
Par contre en html tu ne peux pas appeler des fichiers qui ne sont pas accessible depuis internet (ce qui semble être le cas de ton global.css).
De plus puisque tu arrives à faire un file_get_content, tu devrais pouvoir faire un include de la même manière. Par exemple dans la balise head de ton fichier html tu peux faire :
<style type="text/css"> <?php include('../../../global.css'); ?> </style>
Bien vérifier les chemins absolus en fonction de la page appelée.
Bonne journée
Azraka
Messages postés
252
Date d'inscription
mercredi 11 juin 2008
Statut
Membre
Dernière intervention
5 juin 2014
13
4 juil. 2013 à 12:20
4 juil. 2013 à 12:20
ephelya
Messages postés
289
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
2
4 juil. 2013 à 12:40
4 juil. 2013 à 12:40
Merci pour vos réponses.
Pour le moment, ça fonctionne avec include, parce que j'ai modifié php.ini, mais ça m'inquiète côté sécurité. Ceci dit, tels que j'ai développés le site et l'outil, je ne fais jamais d'include de page depuis les paramètres GET, donc est-ce qu'il y a quand même une faille de sécurité ?
Et est-ce que open-basedir serait plus sûr?
Pour le moment, ça fonctionne avec include, parce que j'ai modifié php.ini, mais ça m'inquiète côté sécurité. Ceci dit, tels que j'ai développés le site et l'outil, je ne fais jamais d'include de page depuis les paramètres GET, donc est-ce qu'il y a quand même une faille de sécurité ?
Et est-ce que open-basedir serait plus sûr?
ephelya
Messages postés
289
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
2
4 juil. 2013 à 12:42
4 juil. 2013 à 12:42
je n'ai jamais utilisé open-basedir, mais si je comprends bien, il faudrait que je m'en serve en complément pour limiter les dossiers accessibles pou un include, c'est bien ça?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
4 juil. 2013 à 14:00
4 juil. 2013 à 14:00
Vous avez besoin de modifier qu'un seul paramètre dans le php.ini, pas la peine de modifier le fichier même !
Depuis PHP 5.3.0, open_basedir peut être affinée au moment de la compilation. Ceci signifie que si open_basedir est définie à /www/ dans le fichier php.ini, un script peut affiné la configuration en /www/tmp/ au moment de la compilation en utilisant la fonction ini_set(). Lors d'un parcours de plusieurs dossiers, vous pouvez utiliser la constante PATH_SEPARATOR suivant le système d'exploitation.
Par défaut, open_basedir pointe vers la racine de votre site, ce qui signifie que vous ne pourrez pas accéder a un répertoire parent de ce dernier !
Donc en utilisant ini_set('open_basedir', '/www'), vous redéfinissez le plus haut répertoire vers lequel vos scripts peuvent accéder, qui dans ce cas se trouve être "www".
Depuis PHP 5.3.0, open_basedir peut être affinée au moment de la compilation. Ceci signifie que si open_basedir est définie à /www/ dans le fichier php.ini, un script peut affiné la configuration en /www/tmp/ au moment de la compilation en utilisant la fonction ini_set(). Lors d'un parcours de plusieurs dossiers, vous pouvez utiliser la constante PATH_SEPARATOR suivant le système d'exploitation.
Par défaut, open_basedir pointe vers la racine de votre site, ce qui signifie que vous ne pourrez pas accéder a un répertoire parent de ce dernier !
Donc en utilisant ini_set('open_basedir', '/www'), vous redéfinissez le plus haut répertoire vers lequel vos scripts peuvent accéder, qui dans ce cas se trouve être "www".
ephelya
Messages postés
289
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
2
4 juil. 2013 à 15:06
4 juil. 2013 à 15:06
Vous avez besoin de modifier qu'un seul paramètre dans le php.ini, pas la peine de modifier le fichier même !
Oui, c'est ce que j'ai fait
Donc en utilisant ini_set('open_basedir', '/www'), vous redéfinissez le plus haut répertoire vers lequel vos scripts peuvent accéder, qui dans ce cas se trouve être "www".
Est-ce plus sécuritaire que allow_url_include? C'est ma principale préoccupation...
En tout cas, ça semble être la réponse que j'attendais, merci! :-)
JooS
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
228
4 juil. 2013 à 16:31
4 juil. 2013 à 16:31
Je dirais que open_basedir est plus sécurisé, puisque ça se limite au répertoire que vous définissez, or, ce répertoire sera toujours a l'intérieur de votre espace d'hébergement.
Tandis que allow_url_include initialisé a 1, vous pourrez par la suite inclure n'importe quelle page sur internet, et si cette dernière contient du PHP, et ben il sera exécuté de même.
Tandis que allow_url_include initialisé a 1, vous pourrez par la suite inclure n'importe quelle page sur internet, et si cette dernière contient du PHP, et ben il sera exécuté de même.
ephelya
Messages postés
289
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
2
7 oct. 2013 à 12:46
7 oct. 2013 à 12:46
Juste pour clore le sujet, j'ai résolu mon problème simplement avec la fonction file_get_content($monfichier), ça remplace l'include et ça évite les problèmes de sécurité ! :)