Actualites | Forum |Archives
Le magazine des décideurs et webmasters qui gagnent !
Inscription | Livre d'or | Plan du site | 15 visiteurs actifs
   
A la Une
Actualité
Dossiers
Communiqués
Coin Technique
Agenda des salons
Emploi
Echange de liens

Archives
Sélection
Expérience qui parle
Internet quotidien
Tous les dossiers

Forum
Forum SAM-MAG

Guides
Check-list de la promotion des sites
Promouvoir et référencer les sites web

Contact
Nous contacter
Newsletter
La protection des données personnelles


 
  Contrôler l'accès de pages d'un site web (II)
Dossier "SAM l'Informaticien" du 08 au 21 Janvier 2001 par Julie Meloni

ous allons poursuivre notre étude de contrôle d'authentification d'utilisateurs. Nous allons sophistiquer notre système en contrôlant les codes à partir d'un fichier texte puis d'un fichier .htpasswd. Nous avons afficher un message de succés lors d'une authentification correcte, nous allons maintenant afficher une page HTML puis rediriger l'utilisateur vers la page tant attendues.

(Traduit de l'article original www.zend.com/zend/tut/authentication.php)

Validation à partir d'un fichier à plat

Notre fichier est constitué de la façon suivante:
joe:ai890d
jane:29hj0jk
mary:fsSS92
bob:2NNg8ed
dilbert:a76zFs


Nous allons au sein de la boucle de lecture du fichier, comparer les valeurs de $PHP_AUTH_USER et $PHP_AUTH_PW. Le flag $auth est initialisé à faux au début, si coïncidence est trouvée, ce drapeau devient vrai ; en fin de boucle, si le drapeau est toujours faux c'est que l'utilisateur n'est pas autorisé et on affiche la boîte de dialogue.

Explication du code source

  • On ouvre et lit le fichier "file.txt" dans la variable $file_contents.
  • La fonction "explode" éclate chaque ligne de texte dans un élément du tableau $lines, car nous savons que les lignes sont séparées< par un caractère de nouvelle ligne "\n".

<?php

$auth 
false// Assume user is not authenticated

if (isset( $PHP_AUTH_USER ) && isset($PHP_AUTH_PW)) {

    
// Read the entire file into the variable $file_contents

    
$filename '/path/to/file.txt';
    
$fp fopen$filename'r' );
    
$file_contents fread$fpfilesize$filename ) );
    
fclose$fp );

    
// Place the individual lines from the file contents into an array.

    
$lines explode "\n"$file_contents );

    
// Split each of the lines into a username and a password pair
    // and attempt to match them to $PHP_AUTH_USER and $PHP_AUTH_PW.

    
foreach ( $lines as $line ) {

        list( 
$username$password ) = explode':'$line );

        if ( ( 
$username == "$PHP_AUTH_USER" ) &&
             ( 
$password == "$PHP_AUTH_PW" ) ) {

            
// A match is found, meaning the user is authenticated.
            // Stop the search.

            
$auth true;
            break;

        }
    }

}

if ( ! 
$auth ) {

    
header'WWW-Authenticate: Basic realm="Private"' );
    
header'HTTP/1.0 401 Unauthorized' );
    echo 
'Authorization Required.';
    exit;

} else {

    echo 
'<P>You are authorized!</P>';
}

?>

Validation à partir d'un fichier .htpasswd

Vous savez sans doute déjà que les mots de passe dans ce type de fichier ne sont pas en clair mais cryptés par l'algorithme DES standard d'Unix. Notre fichier se présente alors de la façon suivante:
joe:WvzodahMR9USk
jane:g3RYjX5evEvdM
julie:YzASzTGEo2VMA

Le mot de passe de «joe» n'est pas «WvzodahMR9USk». son mot de passe en clair est, je vous le dis «abba001» et «zodahMR9USk» est la version cryptée par DES de ce mot de passe, alors que «Wv» est le grain de sel de la fonction crypt(). Ce grain de sel est nécessaire pour la comparaison du mot de passe. On ne décrypte pas les mots de passe ! On crypte la chaîne de caractères candidate à être mot de passe avec le même grain de sel et on compare le résultat avec la chaîne cryptée stockée dans le fichier.

Explication du code source

  • On compare le code utilisateur saisi avec celui obtenu par lecture du fichier, si il ya concordance, on extrait le grain de sel du mot de passe crypté et stocké, on crypte le mot de passe saisi et on effectue la comparaison.
  • Le reste du script est identique.

<?php

$auth 
false// Assume user is not authenticated

if (isset( $PHP_AUTH_USER ) && isset($PHP_AUTH_PW)) {

    
// Read the entire file into the variable $file_contents

    
$filename '/path/to/.htpasswd';
    
$fp fopen$filename'r' );
    
$file_contents fread$fpfilesize$filename ) );
    
fclose$fp );

    
// Place the individual lines from the file contents into an array.

    
$lines explode "\n"$file_contents );

    
// Split each of the lines into a username and a password pair
    // and attempt to match them to $PHP_AUTH_USER and $PHP_AUTH_PW.

    
foreach ( $lines as $line ) {

        list( 
$username$password ) = explode':'$line );

        if ( 
$username == "$PHP_AUTH_USER" ) {

            
// Get the salt from $password. It is always the first
            // two characters of a DES-encrypted string.

            
$salt substr$password );

            
// Encrypt $PHP_AUTH_PW based on $salt

            
$enc_pw crypt$PHP_AUTH_PW$salt );

            if ( 
$password == "$enc_pw" ) {

                
// A match is found, meaning the user is authenticated.
                // Stop the search.

                
$auth true;
                break;

            }

        }
    }

}

if ( ! 
$auth ) {

    
header'WWW-Authenticate: Basic realm="Private"' );
    
header'HTTP/1.0 401 Unauthorized' );
    echo 
'Authorization Required.';
    exit;

} else {

    echo 
'<P>You are authorized!</P>';
}

?>

Ps : Ce source ne fonctionne qu'en PHP4 car la fonction foreach n'existe pas en PHP3. Vous pouvez télécharger le source .php3 ci-dessous. Afin d'en éviter la visualisation, je lui ai ajouté une extension .ber qu'il vous suffit d'enlever.

 

<<Lire la 1ère partie

 

Julie Meloni
Tech. Director, i2i Interactive
www.thickbook.com

Traduit par Daniel Lucazeau
@jornet.com
Chef de projet Internet

Tous droits réservés - Reproduction même partielle interdite sans autorisation préalable

 
 
Google
 
Web www.sam-mag.com
 

Copyright © ACORUS 2004. All Rights Reserved

- Sam-Mag.com Referencement-Sur-mesure - Referencer-Site-Web.com
Visibilite-Internationale.com - Referencement-Immobilier.net