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
Bonjour à tous,

Je suis en train de développer un outil multi-sites. La matrice de création (à la racine du site www/) comporte toutes les infos nécessaires à la production de sites, qui sont eux-mêmes dans un dossier www/WWW.
Jusqu'ici tout va bien mais dès que j'ai un nom de domaine qui pointe par ex vers WWW/SITES/monsite, mes include du type ../../fichier.php ne fonctionnent plus vu que le fichier est considéré comme étant externe.
Je sais pourtant qu'il est possible de faire un include de fichier au-dessus de la racine, mais je ne retrouve pas la manip...
Est-ce que quelqu'un peut m'aider? Je ne trouve rien sur GG...
Merci d'avance!

A voir également:

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
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" ?
1
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
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 ?.
1
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
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.
0
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
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...
0
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
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 !

ini_set('open_basedir', '/www');
0
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 :
<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
0
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
1
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
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?
1
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
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?
0

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
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".
1
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
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! :-)
0
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
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.
0
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
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é ! :)
0