Bonsoir,
J'ai suivi le tutoriel d'ob_start et une fois avoir sécuriser le tout avec une expression régulière. Je me suis pencher sur une question. Je voudrais faire une partie admin dans le contenu, en créant un dossier admin (qui sera sécurisé par les sessions), qui contiendra la pages de login, script d'ajout et de delete, etc..
Cependant je me heurte à un souci. Comment puis je autoriser un second include"app/admin".$_GET"p"].".php" pour ma variable $contenu.. Car le script n'autorise que de prendre le contenu dans "app/pages/ Pouvez m'aiguiller ??? SVP
Si j'ai du mal à me faire comprendre, c'est parce qu'il est tard et mon cerveau à du mal.. le tuto sur "Un site de A à Z, jour 4" m'a bien casser les neurones... lol
Je vous remercie d'avance pour votre aide..
Cordialement

<?php

define("WEBROOT","/projet/Webroot/");

if(!isset($_GET"p"])){
    $_GET"p"]="index";
    }

    if(!file_exists("app/pages/".$_GET"p"].".php")){
        $_GET"p"]="404";
        }

        if(!preg_match("#^[a-zA-Z0-9\/]+$#",$_GET'p'])){
            $_GET'p']="404";
            }

            ob_start();

            include "app/pages/".$_GET"p"].".php";

            $contenu = ob_get_contents();

            ob_get_clean();

            include "Webroot/template.php";
?>

2 réponses


WinuX
Réponse acceptée

Je suis pas sur, mais ya toujours une faille la dedans (null bytes? avec include).

Sécurise ta variables $_GET'p'] avec par exemple ceci :

<?php
$pageAutorise = array('index', 'admin');
if(in_array($_GET'p'], $pageAutorise)){
    $page = $_GET'p'];
}else
    $page = '404';
include('app/pages/'.$page.'.php';
?>
Mizzou
Auteur
Réponse acceptée

Merci pour le coup de pouce!!
Finalement en reprenant le tutoriel de obstart, j'ai compris que $_GET'p'] ne se limitait pas un simple, index, blog, ou autres.
En fait $_GET'p'] correspond au chemin.
J'ai donc tout simplement retirer pages dans mes vérifications, et cela donne ceci:

<?php

define("WEBROOT","/projet/Webroot/"); //constante pour relier les css, images et js
define("BASE_URL","/projet/"); //constante pour relier les liens dans le template
if(!isset($_GET"p"])){
    $_GET"p"]="index";
    }

    if(!file_exists("app/".$_GET"p"].".php")){
        $_GET"p"]="404";
        }

        if(!preg_match("#^[a-zA-Z0-9\/]+$#",$_GET'p'])){
            $_GET'p']="404";
            }

            ob_start();

            include "app/".$_GET"p"].".php";

            $contenu = ob_get_contents();

            ob_get_clean();

            include "Webroot/template.php";
?>

C'était aussi simple.
J'utiliser egalement le .htaccess et effectivement maintenant il faut que je me penche sur la sécurisation de ma variable $_GET"p"]

Au plaisir et merci encore