[PHP]open_basedir restriction in effect

Fermé
tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007 - 10 juil. 2007 à 22:15
tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007 - 11 juil. 2007 à 13:00
Bonjour à tout le monde !
Ca fasiait longtemps..Environ 3 jours! Lol ! Mais ce n'est aps de ma faute je trouve que vous êtes un excellent forum !
Passons aux chose sérieuses, j'ai construit mon site avec des pseudo-frames et j'ai voulu le sécuriser..Mais je n'y arrive pas comme l'indique le titre de mon message !
J'ai trouvé plusieurs solutions mais j'en ai retenu deux.
La première :
$page = ( isset($_GET['page']) ) ? $_GET['page'] : '';
$path = '/include/'; //dossier d'où dois être inclus le fichier 
$extension = '.php'; //extension du fichier
   if ( preg_match("#^[a-z0-9_-]+$#i",$page) )
   {
      $filename = $path.$page.$extension;
         if ( file_exists(dirname(__FILE__).($filename)) )
         {
            $centre = $filename;
         }
         else
         {
           $centre = 'acces'; // page d'erreur
			 //echo 'il y a un problème';
         }
   }
   else
   {
      $page = 'formation-opc'; //page par défault 
      $filename = $path.$page.$extension; 
      $centre = $filename;
	  }


Accompagné de
include($centre);
dans ma div centre

La deuxième solution :
if (isset ($_GET['page']))//si une page est choisie
            {
            $page=htmlentities (basename ($_GET['page']), ENT_QUOTES);
            $page = str_replace(".","include/",$page);
            if (file_exists('include/'.$page.'.php') and ($page != 'index')) // et si elle appartient bien au site, et si elle est differente de 'index', pour éviter les boucles infinies...
                {
                include('include/'.$page.'.php');// l'inclut ce a quoi elle correspond
                }
            else
                {
                include('include/acces.php');//sinon, on mets une page par défaut
                }
            } 

Pour la dernière solution, j'ai la page par défaut qui apparaît.

Pour la première ça me met:
Warning: main() [function.main]: open_basedir restriction in effect. File(/include/formation-opc.php) is not within the allowed path(s): (/usr/local/psa/home/vhosts/agilicom.fr/httpdocs:/tmp) in /usr/local/psa/home/vhosts/agilicom.fr/httpdocs/AGILiCOM/index.php on line 74

Warning: main(/include/formation-opc.php) [function.main]: failed to open stream: Operation not permitted in /usr/local/psa/home/vhosts/agilicom.fr/httpdocs/AGILiCOM/index.php on line 74

Warning: main() [function.include]: Failed opening '/include/formation-opc.php' for inclusion (include_path='.:/usr/local/psa/apache/share/pear') in /usr/local/psa/home/vhosts/agilicom.fr/httpdocs/AGILiCOM/index.php on line 74


Si dans la variable $path je mets :

dirname(__FILE__).'/include/'

ou
'http://www.agilicom.fr/AGILiCOM/include/' 

Ca me trouve seulement ma page par défaut

Je suis en stage dans une entreprise où j'essaie de proposer un site (enfin surtout pour mon rapport parce que vu mon entreprise je doute que l'entreprise le prenne, mais juste pour moi je veux faire quelque chose de correct !), enfin bref, je ne peux donc avoir accès au fichier php.ini car il semble que ce soit sur un serveur mutualisé( peut-être devrais-je demander plus d'infos à ce sujet ?)
J'ai donc créé mon semblant de site dans le site en quelque sorte ...je ne sais pas si vous me suivez ?

J'ai également essayé de créer un fichier tmp à la racine du site de l'entreprise et à la racine de mon site, mais ça ne fonctionne pas.
J'ai lu que certain expliquait de mettre mon document dans un répertoire descendant du open_basedir, mais je ne comprends pas bien.
D'autres parlent de
opendir(getcwd() . DIRECTORY_SEPARATOR)
mais je ne sais pas où le placer...
Et enfin sur ce site https://www.developpez.net/forums/d220920/php/langage/php-js-include-imbrique-pose-probleme/
il explique la méthode suivante que je n'ai pas compris non plus
define('MAIN_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR);


P.S. : mon safe_mode de local value est à on
et mon safe_mode de master value est à off

Si quelqu'un pouvait m'expliquer un peu, ça serait sympa, parce que je suis depuis ce matin dessus sans rien de très probant...Merci pour toute l'aide que vous me donnerez.

1 réponse

tximiti Messages postés 27 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 18 août 2007
11 juil. 2007 à 13:00
Je tenais à préciser que je connaissais la méthode avec les tableaux et du switch, mais comme je risque d'avoir plus de 100 pages ces solutions ne me conviennent pas.
Quand je fais une echo de $filename ça m'indique /include/formation-introduction-reseaux.php.php
Et ce fichier est bien dans mon dossier include.
Quand je mets :
$path = dirname(__FILE__).'/include/'; 

Ca me met /usr/local/psa/home/vhosts/agilicom.fr/httpdocs/AGILiCOM/include/formation-introduction-reseaux.php.php
et donc j'arrive à avoir la page par défaut mais pas les pages appelées par mon menu qui est inclus dans la page index.php...
Après une bonne nuit de sommeil, je pense être sur la bonne voie...Maintenant reste à trouver le bon chemin pour appeler mes pages dans mon menu inclus dans la page index.php !
0