Quantcast
Channel: Snoupix » php
Viewing all articles
Browse latest Browse all 2

Protéger l’accès à une page

0
0

 

Etape 1: Réalisation de la page d’authentification

La première étape va consister à réaliser notre formulaire d’authentification qui se trouvera sur cette page qu’on apellera : »index.php« .

<html>
        <head>
            <title>Identification</title>
        </head>
        <body>
            <form action="index.php" method="post">
                <label>Login</label><input type="text" name="login"/>
                <label>MDP</label><input type="password" name="mdp"/>
                <button type="submit">Valider</button>
            </form>
        </body>
    </html>

Cette page et volontairement simplifiée, j’y ai enlevé les éléments propres à xHTML, etc… On se retrouve donc avec un formulaire assez simple composé de deux champs « login » et « mdp » puis d’un bouton pour soumettre notre formulaire.

Les variables seront transmises avec la méthode post étant donné que faire apparaître un mot de passe en clair dans une URL ne serait pas très sécurisant (voir pas du tout^^).


Etape 2 : La classe Identification

On aurait pu concevoir ce tutorial sans l’utilisation de classe, mais dans une optique pour vous de pouvoir par la suite ajouter quelques fonctionnalités supplémentaires (gestion de compte, etc…) j’ai préférer choisir la programmation objet.

Voici notre classe que l’on nommera Identification et qui se retrouvera dans le fichier « class.Identification.php« . Voici l’ossature de cette classe pour que vous puissiez y voir un peu plus clair avant de commencer:

<?php
class Identification{

		public function __construct(){
			session_start();
		}
		public function connexion(){
		}
		public function deconnexion(){
		}
		public function verificationAcces(){
		}

}
?>

Cette classe va donc posséder 3 méthodes (fonctions): Une qui nous permettra de nous connecter (en fonction de la variable $_POST passée en paramètre), une pour se déconnecter et enfin une dernière pour vérifier si l’on est bien connecté. Vous remarquerez aussi une méthode particulière : le constructeur (__construct) qui est éxécutée automatique dés que l’on instancie un objet de cette classe. Cette méthode ne fait ici rien de particulier si ce n’est démarrer une session qu’on réutilisera par la suite.

Etape 3 : La connexion

Nous allons donc maintenant remplir la méthode connexion (prenant en paramètre la superglobale $_POST). Voici son code:

public function connexion($tab){
			if(!empty($tab['login'])){
				$login = $tab['login'];
				$mdp = $tab['mdp'];
				include('config.php');
				$connect = mysql_connect(MYHOST, MYUSER, MYPASS)  or die ('Identifiants incorrects');
				mysql_select_db(MYDB) or die ('Base de données incorrecte');
				$requete = 'SELECT id,login,mdp FROM utilisateurs WHERE login="'.mysql_real_escape_string($login).'" AND mdp="'.mysql_real_escape_string(md5($mdp)).'"';
				$result = mysql_query($requete);
				$utilisateur = mysql_fetch_assoc($result);
				if(mysql_num_rows($result) == 1){
					$_SESSION['connecte'] = true;
					$_SESSION['id'] = $utilisateur['id'];
					header('Location:protege.php');
					return true;
				}
				return false;
				mysql_close($connect);
			} else{
				return true;
			}
		}

Cette méthode va donc renvoyer true si l’utilisateur n’a rien rempli ou s’est bien connecté, sinon false si ses identifiants sont incorrects. Dans un premier temps il va falloir tester si le login est vide avec la fonction empty(). S’il ne l’est pas on éxécute le reste de notre fonction.

Ensuite nous nous connectons à une base de donnée pour vérifier le couple login/mdp. Pour cela on effectue une requête de type SELECT avec une condition WHERE ou les 2 paramètres doivent être respectées.

table des utilisateurs

Pour vous connecter à votre base de données, vous avez besoin de vos identifiants. Je les ai donc placé dans un fichier config.php, qui correspond pour moi à ca:

<?php
define("MYHOST","localhost");
define("MYUSER","root");
define("MYPASS","");
define("MYDB","snoupix_tutoriaux");
?>

La requête utilise 2 fonctions particulières:

  • mysql_real_escape_string() qui permet de sécuriser votre application en évitant les attaques par Injection SQL.
  • md5() qui crypte le mot de passe en MD5, étant donné que les mots de passes ne sont pas stockés dans la base de données en durs, il est nécessaire de crypter le mot de passe dans notre requête. Par ailleurs si vous utilisez la table montrée un peu plus haut et disponnible dans le code source, le mot de passe correspond à « toto ».

Après avoir éxécuté notre requête et vérifié qu’elle nous renvoit bien une seule ligne. Nous initialisons notre variable superglobale de session en précisant aussi l’identifiant du connecté (cela peut être utile de le récupérer après dans les autres pages…). Enfin si tout s’est bien passé, nous redirigeons notre utilisateur vers la page protégée en question.

Etape 4: Et dans l’index.php?

Il ne reste plus qu’à tester cette méthode dans notre page index.php, en n’oubliant pas d’inclure notre classe Identification, on en arrive à ceci:

<?php
	include('class.Identification.php');
	$connexion =  new Identification();
	$affichage = '';
	if(!$connexion-&gt;connexion($_POST)){
		$affichage = '
&lt;p class="error"&gt;MDP ou Login incorrects

';
	}
?>
<html>
    <head>
        <title>Identification</title>
    </head>
    <body>
        <?=$affichage?>
        <form action="index.php" method="POST">
            <label>Login</label><input type="text" name="login"/>
            <label>MDP</label><input type="password" name="mdp"/>
            <button type="submit">Valider</button>
        </form>
    </body>
</html>

Voilà tout ce que l’on à faire est d’afficher un message d’erreur si la méthode renvoit false :)

Etape 5 : Protéger les pages

C’est bien gentil tout ça, mais ca n’empêche pour l’instant pas les gens d’accéder à notre page protege.php en y accédant en tapant l’URL. C’est là qu’intervient notre méthode verificationAcces().

public function verificationAcces(){
    if(!$_SESSION['connecte'] == true)
         header('Location:index.php');
}

Cette méthode est en fait très simple nous testons juste si la variable $_SESSION['connecte'] vaut bien true.

Enfin dans notre page protege.php, il suffit simplement d’instancier la classe Identification et d’éxécuter la méthode verificationAcces() comme ceci:

<?php
	include('class.Identification.php');
	$identification = new Identification();
	$identification-&gt;verificationAcces();

    echo 'Ouaw! Des infos confidentielles &lt;a href="index.php?deconnexion=true" _mce_href="index.php?deconnexion=true"&gt;Se déconnecter&lt;/a&gt;';
?>

Etape 6: Et moi j’en ai marre, je veux me déconnecter

Il nous manque plus que la méthode deconnexion() à réaliser. Cette méthode est relativement simple, elle utilise 2 fonctions: session_destroy(), qui détruit la session et unset() qui vide et détruit une variable :

public function deconnexion(){
	session_destroy();
	unset($_SESSION);
}

Pour éxécuter cette méthode vous l’avez peut être remarqué dans le script précédent, j’utilise une URL qui pointe vers index.php avec une variable de types GET : index.php?deconnexion=true.

Enfin je teste dans ma page si la variable $_GET['deconnexion'] == true auquel cas, il faudra éxécuter notre méthode.

if(isset($_GET['deconnexion'])){
   if($_GET['deconnexion'] == true){
	$connexion-&gt;deconnexion();
   }
}

Ce tutorial touche à sa fin, n’hésitez pas à laisser des commentaires, si vous souhaitez quelques éclaircissements ;) .


Viewing all articles
Browse latest Browse all 2

Latest Images





Latest Images