Securité piratage

Bonjour,

je voulais savoir si mon code était sécurisé , j'ai un tableau de 2 colonnes
dans la première colonne j'ai fait des liens en php

<?php
echo '<a href="index2.php?page=cours">COURS</a>';
?>

puis dans la deuxième colonnes j'ai mes includes

<?php
if ($_GET['page'] == "accueil")
{
include("accueil1.html");
}else{
include("accueil1.html");
}

Pourriez vous me dire si celà est suffisant pour la sécurisation
Un grand merci pour votre aide
Anne Marie
Configuration: Windows Vista Internet Explorer 7.0

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Bonjour, je mettrais plutôt ca à ta place :
    <?php
    if(isset($_GET['page']) AND file_exists($_GET['page'].'.php'))
    {
    include $_GET['page'].'.php';
    }
    else
    {
    include 'accueil1.html';
    }
    ?>
    
    1. merci pour ta réponse, je l'insere comme ca ? ( je ne suis vraiment pas doué en php )

      <?php
      if(isset($_GET['page']) AND file_exists($_GET['page'].'accueil.php'))
      {
      include $_GET['page'].'accueil.php';
      }
      else
      {
      include 'accueil1.html';
      }
      ?>

      par contre j'ai aussi trouvé ce code très securisé parat il !

      $page=preg_replace("/[^a-z0-9_ ]/i", "", $page);
      if(!@include("includes/$page.php"))die("Cette page n'existe pas sur le serveur, merci d'informer le webmaster du site si ce problème venait à se reproduire.");

      mais le probleme c'est que je n'y comprends rien , pourrez tu me dire s'il te plait où mettre ce code dans mes includes

      merci encore pour ton aide , je fais un site gratos pour un ami .
  2. Contributeur
    non,

    if(isset($_GET['page']) AND file_exists($_GET['page'].'.php'))

    $_GET['page'] sera remplacé par la page que tu veux, auquel on ajoute l'extansion .php
    1. alors comme ca ?
      if(isset($_GET['accueil']) AND file_exists($_GET['accueil'].'.php'))
      {
      include $_GET['accueil'].'.php';
      }
  3. Contributeur
    NON !

    laisse comme je te l'ai donné, et tu auras une url du type ?page=forums

    page sera interprétée par forums, auquel on ajoutera .php
    1. Contributeur
      Pas top ta solution HACKER 712.
      Si une personne met dans l'url page=http://hacker/toto ça risque de faire du dégât ^^.
      1. Contributeur
        Salut,
        Voici un petit lien qui te permet de faire des include sécurisés : https://openclassrooms.com/fr/courses

        Cdlt
        1. Bonjour

          j'etais juste dessus, mais comme je suis un peu null en php ca va etre un peu difficile ...par contre pour le code que j'ai trouvé

          $page=preg_replace("/[^a-z0-9_ ]/i", "", $page);
          if(!@include("includes/$page.php"))die("Cette page n'existe pas sur le serveur, merci d'informer le webmaster du site si ce problème venait à se reproduire.");

          ce code est t'il valable ? comment puis je l'inserer dans l' exemple du site du zero :

          <?php

          $page = (!empty($_GET['page'])) ? htmlentities($_GET['page']) : 'index';

          $array_pages = array(
          'index' => 'index.php',
          'page1' => 'page1.php',
          'page2' => 'page2.html'
          );

          if(!array_key_exists($page, $array_pages)) include('index.php');

          elseif(!is_file($array_pages[$page])) include('erreur.php');

          else include($array_pages[$page]);

          ?>
          un grand merci pour l'aide que vous m'apporter
        2. Contributeur
          @annemarie1$page=preg_replace("/[^a-z0-9_ ]/i", "", $page);
          Cela permet de vérifier qu'il n'y a que des caractères alphanumériques. Donc grâce à ça, une page ne pourra pas venir d'un site extérieur. Mais cela n'est pas top pour autant car si une personne arrive à uploader une page sur ton serveur (faille upload par exemple) il pourra l'exécuter.

          Le mieux est vraiment de recenser dans un tableau le nom des pages et de vérifier que le GET['page'] appartient à ce tableau comme sur le site susmentionné.

          Cdlt
      2. Contributeur
        Si elle n'existe pas, il y a l'acceuil !

        cf file_exists
        1. Contributeur
          Oui, mais comme dit plus haut, une personne peut très bien mettre une page sur un autre site comme le sien. Le fichier existera alors et la condition passera provoquant une grosse faille de sécurité.
        2. @fiddymerci pour ta réponse

          puis je faire ca donc ?

          <?php

          $page = (!empty($_GET['page'])) ? htmlentities($_GET['page']) : 'index';

          $array_pages = array(
          'cours' => 'cours.html',
          'ateliers' => 'ateliers.html',
          'festivite' => 'festivite.html'
          'stages' => 'stages.html',
          'concerts' => 'concerts.html',

          );

          if(!array_key_exists($page, $array_pages)) include('index.php');

          elseif(!is_file($array_pages[$page])) include('erreur.php');

          else include($array_pages[$page]);

          ?>

          Merci encore
        3. @fiddybon et bien j'ai fait comme ca ? est suffisant contre le piratage pour les includes

          <?php

          $page = (!empty($_GET['page'])) ? htmlentities($_GET['page']) : 'accueil';

          $array_pages = array(
          'accueil' => 'accueil.html',
          'ateliers' => 'ateliers.html',
          'cours' => 'cours.html',
          'festivite' => 'festivite.html'
          );

          if(!array_key_exists($page, $array_pages)) include('accueil.php');

          elseif(!is_file($array_pages[$page])) include('erreur.php');

          else include($array_pages[$page]);

          ?>
          merci pour ton aide précieuse
      3. Contributeur
        Bonjour,
        J'aurais rajouté à la place de !empty($_GET['page']) : isset($_GET['page']) qui est plus prévu pour tester si la variable est définie ou pas. Si la variable est définie est vide, elle sera prise en compte dans la condition sur le tableau.
        Cependant, à part ce petit point discutable, le reste me paraît acceptable d'un point de vue sécurité.

        Cdlt,