Sécurité des includes

Un petit truc que j’ai trouvé sur le net, il y a quelques temps sur le net. Si comme moi, vous avez l’habitude de faire des includes un peu partout. Personnelement je les nomme *.inc.php et parfois ils peuvent être accessible via le web mais sans lien…C’est pas bien grave de voir une header ou un bloc tout seul mais bon pour eviter des erreurs….

if ($_SERVER['REQUEST_URI'] == $_SERVER['PHP_SELF'])
exit();
//Code PHP
?>

Filtrons les entrées

Afin de sécuriser au maximum vos sites, la première règle est de bien faire attention aux entrées utilisateurs. Cette partie peut être un peu fastidieuse mais c’est une des règles à respecter.

Les 3 règles les plus importantes :

  1. Initialiser vos variables utilisées dans la page.
  2. Vérifiez les variables rentrées par l’utilisateur.
  3. Vérifiez l’entrée des fonctions include / require fichiers.

La question c’est donc comment verifier vos variables simplement et efficacement.

Avant PHP 5.2, chacun avait sa propre recette de cuisine car il n’y avait aucune veritable solution dans PHP alors que tout le monde disait que c’était très important surtout suite aux nombreuses alertes qu’on voyait fleurir sur des logiciels Open Source.

Depuis PHP 5.2, l’extension filter (disponible jusqu’alors via PECL) a été inclus dans la distribution standard.

Cette extension est très pratique, elle permet par exemple de valider une adresse email sans se prendre la tête avec les dizaines d’expressions regulières que vous verez ici ou là sur Internet.

$email='nimportequoiyahoo.fr';
  $email=filter_var($email, FILTER_VALIDATE_EMAIL);
//$email est à null car l'adresse est incorrecte
$email='bonneadresse@bondomaine.com';
$email=filter_var($email, FILTER_VALIDATE_EMAIL);
//$email vaut "bonneadresse@bondomaine.com"

A retenir, on met la variable en premier argument et le filtre qu’on veut appliquer en deuxième.
Si cela retourne « null », la variable n’est pas correcte sinon elle est correcte.

Aprés on peut faire des choses plus complexe, l’utilisateur doit rentrer un entier entre 1 et 10

$categorie=filter_var($_GET['categorie'],
  array(
            //je veux uniquement un entier
            'filter'    => FILTER_VALIDATE_INT,
            //il doit etre compris dans un tableau
            'flags'     => FILTER_REQUIRE_ARRAY,
            //entre 1 et 10
            'options'   => array(
						   'min_range' => 1,
							 'max_range' => 10
							 )
           ));

Aprés dans la vie de tous les jours, vous aimeriez filtrer l’ensemble de votre formulaire en une seule fois :

// je decris mon formulaire sous forme de tableau
// avec les format attendu
$config_form = array(
    'produit'   => FILTER_VALIDATE_INT,
    'categorie'    => array('filter'    => FILTER_VALIDATE_INT,
                            'flags'     =>FILTER_REQUIRE_ARRAY,
                            'options'   => array('min_range' => 1, 'max_range' => 10)
                           )
);
 
$_POST_CLEAN = filter_input_array(INPUT_POST, $config_form);
//je recupére ainsi dans $_POST_CLEAN tout ce qui était
//dans $_POST mais maintenant les données sont
//filtrées.

A vous de jouer !



Check out our best movie collection. Latest CD, DVD, HQ DVD movie downloads. Buy and download movies instantly.