Espace membres

Bonjour Anonyme

Inscription

Email :
Mot de passe :

Mot de passe oublié ?

Nos scripts

MySpeach

MySpeach est un chat php sans base de donnée, rapide, léger et facile à prendre en main. DEMO

MyPHPUpload

MyPHPUpload est un script d'upload sécurisé écrit en PHP. DEMO

GrapAgenda

Agenda PHP et MySQL avec comptes utilisateurs et administration. DEMO

Livre PHP

Les include PHP ou pseudo frame PHP

Cours / tutoriel écrit le 17-06-2010 par sky
Les pseudos frames PHP : L'art de l'include

Les include() PHP ou encore PHP pseudo frames

Programmer en PHP sans include, c'est que à mon avis, vous ne programmer rien du tout oui! La fonction require() et include() sert à inclure un autre fichier. En générale, on s'en plus pour créer un code plus lisible. Genre, on écrit toute nos fonctions sur une page, et, des que l'on en aura besoin, on l'appelle.

On s'en sert aussi pour faire comme les frames HTML, appellez communément "PHP pseudo Frames" et c'est là ou je veut en venir ...

Le principe :

On fais passer un paramettre dans l'url et on inclus une page en fonction de sa valeur

Voici un exemple de pseudo frames NON sécurisé :

créer le fichier index.php :
<table><tr><td>
<a href="index.php_page=page1.php">Menu1</a>
<a href="index.php_page=page2.php">Menu2</a>
</td><td>
<?php
if($_GET[page]){
  include($_GET['page']);
}
?>


Créer ensuite une page "page1.php" ainsi qu'une page "page2.php" que vous mettrez dans le MEME répertoire que index.php.
Allez sur la page index.php, et cliquez sur un des liens. Normalement, si tout c'est bien passé, la page demandé devrai apparaitre.

Tout ceci est très bien, si ce n'est que sur internet, créer un site web en PHP demande TOUJOURS de se renseigner sur la sécurité. C'est assès contraignant au début mais je vous assure que ceci vaut le temps qu'on y passe.

Donc, vous vous en serez douté, dans l'exemple cité audessus, y'a ce qu'on appelle une ENORME faille de sécurité. Tapé ceci dans votre navigateur : index.php_page=http://www.google.fr/index.html

Surprise, vous allez vous retrouvez avec la page de google inclus dans votre site !

Ceci en soit n'est pas grave, mais, imaginons que quelqu'un essaye de faire pareil une page avec un code PHP ou autre malicieux ! ceci entrainerai dans le meilleur des cas à un avertissement de la part de la personne qui a découvert la faille, au pire des cas à la suppression du site en entier voir du serveur s'il est mal configurer.

Pour combler cette faille nous devons vérifier si la page demandé existe belle et bien sur le serveur.


Exemple de pseudo frame SECURISE ! :

Le nouveau code corrigé de la page index.php :
(vous pouvez aussi créer la page par defaut (ici accueil.php))
<html>
<head>
    <title>Pseudo Frame PHP</title>
</head>
<body>
<h1>Pseudo Frame PHP</h1>
<ul>
    <li><a href="./index.php">Accueil</a></Li>
    <li><a href="./index.php_page=page1">Page 1</a></Li>
    <li><a href="./index.php_page=page2">Page 2</a></Li>
</ul>
<div>
<?php
// Chemin absolu
// le répertoire dans lequel se trouve CE fichier
// IMPORTANT : mettre un / à la fin
$root_dir = $_SERVER['DOCUMENT_ROOT'].'/';


// la page par defaut, si les valeurs fournies sont incorrect :
$page_defaut = 'accueil';


// on recupere la valeur passé dans l'url :
if(!empty($_GET["page"]))
    $page = $_GET["page"];
else
    $page = $page_defaut;


//Enlevons les caractères html
$page = htmlentities($page, ENT_QUOTES);


//Si on a des répertoires que l'on ne veut pas accéder, un les liste ici :
$repProteger = array('include', 'libs', 'admin');
$temp = split('/',$page);
if(isset($temp[0]) && in_array($temp[0],$repProteger))
    $page = $page_defaut;


// on enlèves les caractères non autorisés
$page = str_replace(':/', '', $page);
$page = str_replace('./', '', $page);


//Testons si la page demandé existe bien en local
if(file_exists($root_dir.$page.'.php'))
    include($root_dir.$page.'.php');
else
    include($root_dir.$page_defaut.'.php');
?>
</div>
</body>
</html>

Exemple : Pseudo Frame PHP


Quelques exlications
Tout d'abord, on défini une page qui sera utilisé sir les valeurs passé dans l'url de son pas correct: $page_defaut

1) On vérifie si la variable $page existe bien. Si elle n'existe pas, on lui donne la valeur par defaut ($page_defaut).

2) On enlève tout code html/javascript que quelqu'un pourrais faire passer dans l'url.

3) On vérifi si la variable $page ne contiendrai pas de ":/" ... si oui, on redéfini la variable à la valeur par defaut ($page_defaut).

4) Ensuite, ici, vous pourrez mettre les répertoire auquel vous ne voulais pas donner accés. Facultatif.

5) Si jamais quelqu'un tente de lire les fichiers de votre site en amont de l'endroit actuel, on défini la page par defaut ($page_defaut).

6) Puis, finalement, on teste si le fichier demandé existe bien sur le serveur. En utilisant $DOCUMENT_ROOT, on est donc sur que la vérification ce fais sur le serveur et non sur un autre site.


Si vous avez des questions ou des idées pour améliré cette page, faite nous en part sur le forum à en cliquand ici :
Pseudo Frames PHP

Commentaires

arthur le 21-04-2012

je essais de suivrer mais j'ai un probleme de mettre une image dans php

arthur le 21-04-2012

je essais de suivre votre application mes je n'arrive pas a insèrer une image pourriez m'aider

Pseudo
Email
Commentaire

Merci d'écrire le code ici :