8797 sujets

Développement web côté serveur, CMS

Bonjour

J'utilise des includes et je cherche une solution afin de sécuriser cette utilisation qui ne semble pas être le cas dans son utilisation la plus banale ;

<?php include 'xxx.php' ?>



J'ai trouvé et réussi à utiliser le code ci-dessous à la place de celui ci-dessus. Mais d'après mes recherches il me semble qu'il n'est pas vraiment mieux en terme de sécurité ?!

<?php
$valeur = 'xxx.php';

if (file_exists($valeur)) 
{
   include($valeur);} 
else {
   print "erreur";
}
?>




J'ai tenté d'utiliser la méthode ci-dessous, mais en vain, l'erreur safiche sur mon site .. je dois mal l'utiliser.

<?php
// Filtrer
$myFile = filter_var($_GET['xxx.php'], FILTER_SANITIZE_STRING);

// valider
$valid = array('xxx.php');
if (!in_array($myFile, $valid)) {
    die('erreur');
}

include($myFile);
?>



J'ai tenté d'utiliser aussi ceci, mais sans résultat Smiley confus

<?php
if(!empty($_GET['xxx.php']))
{
   if(file_exists('includes/' . $_GET['xxx.php'] . '.php') AND !preg_match("/(\.|config|inc)/iU", $_GET['xxx.php']))
   {
      // On inclue la page, et si le fichier existe le .inc qui va avec
   }
   else
   {
        include('index.php'); // On inclue la page par défaut
   }
}
else
{
      include('index.php');// Inclusion de la page par défaut
}
?>



Apparemment tous ces codes fonctionnent, pas de problème avec les deux premiers, mais ce qui semble être le plus sécurisé sont les deux derniers. J'ai lu, et relu, essayé dans tous les sens, mais rien et là, ça fait trois jours et je sature. J'appel donc au secours afin que quelqu'un puisse me guider dans cette jungle !

Merci Smiley cligne
Modifié par bulle97 (10 Jun 2009 - 09:13)
Salut,

je ne comprends pas bien le sens de la question :

* il n'y a un risque que dans le cas où l'include est fait par rapport à une variable renseignée par le visiteur du genre include($_GET['page']). Donc en général on ne fait jamais cela.

* Si on doit quand même le faire ( Smiley langue ) il existe 2 sécurités très simples :
1) on vérifie que la page à inclure fait partie de la liste des pages qu'il est possible d'inclure (cette liste est un array ou une table mysql ou autre)
2) on interdit toute valeur comportant autre chose que certains caractères (typiquement des chiffres et des lettres) et on renseigne soi-même le chemin et l'extension. Voir un exemple dans ce post.
Merci de ta réponse.

A force de lire que les include = danger je me suis donc dit qu'il fallait sécuriser la chose.

Tu es donc entrain de me dire que la première ligne de code à la rigeur la seconde que j'ai indiqué au début de mon message suffit ? Smiley biggol

Je crois que je vais retourner bosser sur le PHP en évitant certaines sources .. Smiley fache
bulle97 a écrit :
A force de lire que les include = danger je me suis donc dit qu'il fallait sécuriser la chose.
Eh bien... c'est vrai ! Mais pas toujours ! Smiley smile

Sinon il se trouve qu'un sujet très récent parlait justement de sécurité PHP...

Et autresinon : si tu considères que ce sujet est [Résolu] merci de l'indiquer en éditant ton premier post et en modifiant le titre. Smiley cligne
Ok, meci de la confirmation et pour le lien que j'avais déjà lu toute à l'heure .. il me reste du taff Smiley lol

Bonne journèe