L3 Info : PHP et Applications Web
 
◃  Ch. 8 Extra ball !  ▹
 

Contrôle d'accès à une ressource

  • De nombreuses ressources web sont soumises à un contrôle d'accès
  • Une solution consiste à associer l'accessibilité de la ressource à une session
  • Toute ressource soumise à un contrôle d'accès nécessite de disposer d'une variable de session valide
  • L'attribution de cette variable de session est soumise à la validation d'un identifiant/mot de passe
  • Une fois la variable activée la ressource est accessible par le client.
  • Exemple de fonction vérifiant si l'accès a été autorisé :
    // la session doit avoit été activée avant son appel !
    function isAuthorizedAccess(): bool {
        return isset($_SESSION['access']) && $_SESSION['access'] === 'verified';
    }
  • Exemple de contrôle d'accès à la ressource :
    if (! isAuthorizedAccess()) {
      // mémorisation de la destination dans une variable de session
      $_SESSION['destination'] = $_SERVER['PHP_SELF'];
      header('HTTP/1.1 303 See Other');
      header('Location: login.php'); // renvoi au portail de connexion
    }
    else {
    /* accès à la ressource demandée */
    }
  • Script login.php
    function getFormAccess(): string {
    $form = '<h2>Contrôle d\'accès</h2>
    <form action="'.$_SERVER['PHP_SELF'].'" method="post">
    <fieldset><legend>login</legend>
              <input type="text" name="login" /></fieldset>
    <fieldset><legend>password</legend>
              <input type="password" name="password" /></fieldset>
    <button name="action" value="controler">Valider</button></form>';
    return $form;
    }
    if (isset($_REQUEST['login']) && isset($_REQUEST['password']) 
            && isValid($_REQUEST['login'],$_REQUEST['password'])) {
        $_SESSION['access'] = 'verified';
        // mémorisation du login dans la session si nécessaire
        // redirection vers la source ayant demandé le contrôle d'accès
        header('HTTP/1.1 303 See Other');
        header('Location: '.$_SESSION['destination']);
    }
    else {
      echo getDebutHTML().getFormAcces().getFinHTML();
    }