Page 1 sur 1

Include | Require & sécurité ??

Posté : 13 sept. 2005, 15:40
par LooStarAcPower_|_
Bjour tous

Voila j'ai entendu sur 2 trois forum que le fait de faire des include est pas du tout recommandé

dans mon site j'ai une page index.php et un include qui appel la page que je veu voic un lien:
index.php?page=contact.php
je fais mon include comme ça;
<?php include $page;?>
mais parrait-il que l'on peut chopper mes codes ftp ou sql a cause de ça, c'est vrai ou c'est de l'intox ??, et si oui quel solution s'offre a moi ?? et aussi la solution required:
require("mapage.php");
Merci vous
c'est et c'est quoi la difference ??

Posté : 13 sept. 2005, 16:23
par Cyrano
Le danger, c'est que ça permettrait de faire l'inclusion d'un fichier de script distant contenant des codes malveillants. Voici une méthode d'inclusion moins propice à ce genre de piratage:
<?php
$page = (isset($_GET['page']) ? $_GET['page'] : "entree");
switch ($page)
{
    case "a_propos" :
    $page_active = "./pages/about.php";
    break;
    case "services" :
    $page_active = "./pages/services.php";
    break;
    case "realisations" :
    $page_active = "./pages/realisations.php";
    break;
    /* Page par défaut */
    default :
    $page_active = "./pages/accueil.php";
}
/* Définition des constantes de chemins */
define("CHEMIN_PAGE", $page_active, true);

include_once(CHEMIN_PAGE);
?>
De cette manière, il est impossible de faire inclure dans ta page un fichier autre que l'un de ceux que tu as prévus dans le switch.

Posté : 13 sept. 2005, 17:28
par youpi
en clair si j'ai bien compris il est plus utile d'utiliser un require_once lorsque que l'on veut charger les identifiants de connexion plutot qu'un include ou un require tout seul ? mais vaut-il mieux utiliser un require_once ou un include_once ? je sais que l'utilité du require_once permet en réalité de charger une seule fois le fichier comme ci la ligne de texte était remplacé par le contenu du fichier php chargé et cela évite de recharger encore une fois le fichier et celui ci permet par la même occasion d'éviter que le script continu si il y a une erreur dans le fichier qu'on charge ! est ce que je me trompe ?

Posté : 13 sept. 2005, 17:50
par Cyrano
include_once au lieu de include tout court évite les messages d'erreurs. Si plusieurs fichiers constituant une page font appel au même fichier externe, si ce dernier est déjà chargé, il ne le sera pas à nouveau.

Le problème de sécurité évoqué est simple; Si tu fais par exemple:
include($_GET['page']);
Si un petit futé modifie l'url de ton site dans son navigateur et met ceci:
Il va faire une inclusion dans Ta page d'un script de SON site à lui, un script qui pourrait par exemple être un système qui cherche en boucle les identifiants d'accès à ton interface d'administration ou à ta base de données.

Posté : 13 sept. 2005, 18:01
par youpi
lol quand je relis ma phrase je prend peur, donc de toute facon d'après ce que tu dis il faut absolument utiliser include_once ou require_once

Merci bien, tu m'a éclairé ma ptite tête :)

Posté : 13 sept. 2005, 20:53
par Cyrano
...il faut absolument utiliser include_once ou require_once
Non: si il y a un fichier que tu n'utilises qu'à un seul et unique endroit de ton application, et si tu es certain que tu ne l'utilises pas cocuremment sur plusieurs autres fichiers participant à la même page, tu peux n'utiliser que include() ou require() puisque tu sais que le fichier n'est appelé nulle part ailleurs.