Mis à jour le mercredi 8 mars 2017
  • 4 heures
  • Facile

N'ayez jamais confiance !

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Bon, on va commencer en douceur. Ce que je vais vous présenter ici n'est pas une faille, mais plutôt un principe. Comme vous le savez, PHP utilise des variables qui peuvent être transmises de différentes façon : POST, GET, SESSION, cookies... Souvent, l'utilisateur est invité à compléter certaines de ces variables (formulaire par exemple). Il est également possible que l'utilisateur ait accès à ces variables, principalement quand elles se trouvent dans l'URL. C'est pourquoi vous ne devez jamais, au grand jamais, faire confiance aux données envoyées par l'utilisateur ! À titre d'exemple, nous allons nous intéresser à la méthode GET. Imaginons le code suivant :

<?php

if ($_GET['droits'] == "utilisateur") {

    // Panel utilisateur

}

elseif ($_GET['droits'] == "administrateur") {

    // Panel administrateur

} ?>

On suppose une URL dans laquelle la variable droits  prend la valeur utilisateur pour un visiteur normal et administrateur si le visiteur est administrateur.

www.monsite.com?droits=utilisateur // pour un utilisateur classique 
www.monsite.com?droits=administrateur // pour un administrateur

Eh bien si on y regarde de plus près, on réalise que ce code présente une très grosse faille !
En effet, en seulement quelques clics, un utilisateur normal peut devenir administrateur. Il lui suffit de forcer la variable droits  à prendre pour valeur "administrateur" en modifiant l'URL du site web.

Hein ?!! Mais c'est super dangereux ! Il ne faut plus utiliser GET alors ?

Bien sûr que si ! Il faut juste savoir relativiser. On n'utilisera jamais GET pour transmettre des variables auxquelles l'utilisateur ne doit pas avoir accès (droits/password...). Mais GET peut être très utile dans certains cas comme, par exemple, pour créer une pagination. L'utilisateur aura beau modifier la variable du numéro de page, il ne fera que changer de page sans avoir accès à aucunes données confidentielles. 11

Il faut savoir que la méthode GET n'est pas la seule méthode qui soit modifiable par l'utilisateur. Elles le sont presque toutes. Il est extrêmement simple pour un internaute averti de modifier les valeurs envoyées en POST. C'est également le cas des cookies. Un cookie étant stocké sur l'ordinateur de l'utilisateur, le modifier n'est qu'une formalité ! Le cas étudié au-dessus s'applique donc également aux cookies, étant donné que l'utilisateur est en mesure de modifier la variable droits . 

Dans le cas d'un site avec espace membre, il serait donc préférable de vérifier à chaque début de page que l'utilisateur a bien les droits nécessaires pour accéder au contenu. Il est par exemple commode de stocker le statut de la personne ("administrateur" ou "utilisateur") dans la base de données du site.

Pseudo

Password

Statut

Jean

********

Utilisateur

Marie

********

Administrateur

Antoine

********

Utilisateur

Lors de la connexion, ce statut est enregistré dans une variable de session, variable qui sera vérifiée au début de chaque page.

<?php

session_start();

if (isset($_SESSION['statut']) AND $_SESSION['statut'] == "administrateur") {
 echo "Le code secret est 351633135153";
}

else {
    echo "Vous n'avez pas le droit d'être ici !";
}

?>

Avant de vous lancer dans la suite de ce cours, il est extrêmement important que vous ayez assimilé ce principe. Ne faites jamais confiance à l'utilisateur. Partez du principe qu'il fera tout pour faire du mal à votre cher et tendre site. Soyez donc toujours vigilant et ne communiquez jamais à l'utilisateur des informations qu'il pourrait utiliser contre vous ! Mieux vaut trop de restrictions que trop de libertés. 13

Exemple de certificat de réussite
Exemple de certificat de réussite