• Aucun résultat trouvé

TP 08: LES COOKIES, LES SESSIONS, L’AUTHENTIFICATION… Exercices Exercice 1 : Numéro de carte bancaire

N/A
N/A
Protected

Academic year: 2022

Partager "TP 08: LES COOKIES, LES SESSIONS, L’AUTHENTIFICATION… Exercices Exercice 1 : Numéro de carte bancaire"

Copied!
13
0
0

Texte intégral

(1)

TP 08: LES COOKIES, LES SESSIONS, L’AUTHENTIFICATION…

Exercices

Exercice 1 : Numéro de carte bancaire

a) Ecrire un formulaire html permettant de saisir votre nom, votre prénom et votre numéro de carte bancaire ainsi qu’un champ de 3 caractères pour saisir le code figurant au dos de votre carte.

b) Envoyez ces informations à un programme PHP qui affiche ces informations.

c) Fermez votre navigateur puis appelez de nouveau cette page sans passer par le formulaire.

d) Mémorisez les informations reçues dans un cookie avec une durée de vie de 10 minutes.

e) Modifiez votre programme pour chercher les informations soit dans les données issues du formulaire si vous passez par le formulaire, soit dans les cookies de votre machine si vous ne passez pas par le formulaire.

Vérifiez le fonctionnement.

f) Appelez de nouveau cette page 10 minutes plus tard pour vérifier que les cookies oint été détruits.

(2)

Exercice 2 : Authentification

a) Créer une table dans la base de données constituée d’un champ ‘login’ et d’un champ intitulé ‘motDePasse’

permettant de stocker des mots de passe cryptés avec l’algorithme MD5. Alimentez votre table avec quelques valeurs en prenant soin de crypter les mots de passe.

b) Créez un formulaire d’authentification (login + mot de passe) et affichez un message indiquant

« Authentification réussie » ou « login incorrect » ou « mot de passe incorrect ».

Exercice 3 : Authentification pour accéder à un site Inutile d’utiliser les sessions dans cet exercice.

a) A partir de votre formulaire d’authentification, accédez à une page (exemple : votre formulaire du TP précédent) si vous êtes authentifié. Si l’authentification a échoué, affichez de nouveau le formulaire d’authentification.

Conseil : Utiliser « header(‘location : url’) » pour rediriger vers l’url.

Invalide

valide submit

Recup_login.php

(3)

Exercice 4 : Authentification avec les sessions

L’exercice précédent n’a pas permis de protéger vos pages. En effet, il suffit de connaître les url des pages pour y accéder. Afin de protéger les pages et de s’assurer que l’utilisateur est authentifié, nous allons utiliser les sessions.

a) A l’authentification, les login et mots de passe seront mémorisés dans des variables de sessions b) A chaque page accédée, la vérification de la connaissance de ces variables de session sera vérifiée.

c) En cas d’accès à une page avec des variables de session incorrectes, on redirige automatiquement vers la page d’authentification.

Exercice 5 : Affichage des variables de sessions et déconnexion

a) Une fois l’utilisateur authentifié, chaque page doit afficher en en-tête le nom de l’utilisateur.

Conseil : Utilisez un « include ».

b) S’il y a erreur sur la personne, proposez une déconnexion et un renvoi vers la page d’authentification. Vous devez impérativement détruire la session !

Exercice 6 : Nombre de sessions …

Essayez de compter et d’afficher le nombre de connexions sur une page en utilisant la même session.

(4)

Exercice 7 (s’il vous reste du temps) : Authentification permettant d’accéder à une autre page

Dans cet exercice, le formulaire est public mais les résultats sont accessibles uniquement aux personnes authentifiées. De plus, le formulaire de saisie est inclus dans la page de recherche… On fera apparaître soit le formulaire, soit le résultat…

a) Récupérer une page d’un TP précédent (par exemple « recherche.php »)

b) Ajouter une authentification pour pouvoir accéder à cette page en respectant les consignes suivantes :

Tant que l(authentification est incorrecte, le formulaire de saisie de login et de mot de passe est affiché

Préférez les fichiers inclus aux « Copier/coller »

Exercice 8 (s’il vous reste du temps) : Site marchand

Vous devez simuler un site marchand. Les produits à vendre sont à rechercher dans une base de données. Vous stockerez dans des variables de sessions le contenu de votre « panier » (Produits, quantité) ;

En permanence, sur toutes vos pages vous affichez le nombre d’articles et le montant total de votre panier.

Au moment du paiement (simulation), vous transférez votre panier dans des tables « commande » et

« LigneDeCommande » dans la base de données et vous videz votre panier.

(5)

CORRECTION DU TP 08

Exercice 1 : Numéro de carte bancaire

a) Ecrire un formulaire html permettant de saisir votre nom, votre prénom et votre numéro de carte bancaire ainsi qu’un champ de 3 caractères pour saisir le code figurant au dos de votre carte.

b) Envoyez ces informations à un programme PHP qui affiche ces informations.

c) Fermez votre navigateur puis appelez de nouveau cette page sans passer par le formulaire.

d) Mémorisez les informations reçues dans un cookie avec une durée de vie de 10 minutes.

e) Modifiez votre programme pour chercher les informations soit dans les données issues du formulaire si vous passez par le formulaire, soit dans les cookies de votre machine si vous ne passez pas par le formulaire.

Vérifiez le fonctionnement.

f) Appelez de nouveau cette page 10 minutes plus tard pour vérifier que les cookies oint été détruits.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-Strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Formulaire de saisie</title>

<style type="text/css">

body {

background-color:#ffd;

font-family:Verdana,Helvetica,Arial,sans-serif size:10;

}

</style>

</head>

<body>

<h2>Formulaire de saisie d'informations bancaires</h2>

<form action="recup_infosBancaires.php" method="post">

<table>

<tr><td>

Pr&eacute;nom</td><td><input type="text" name="prenom" /></td></tr>

<tr><td>Nom</td><td><input type="text" name="nom" /></td></tr>

<tr><td>Num&eacute;ro de carte bancaire</td><td><input type="text" name="numCB"

/></td></tr>

<tr><td>Cryptogramme</td><td><input type="text" name="crypto" size="3"

maxlength="3"/></td></tr>

</table>

<p>

<input type="reset" name="reset" value="Annulez" />

<input type="submit" name="formBancaire" value="Envoyez" />

</p>

</form>

</body>

</html>

(6)

Exercice 2 : Authentification

a) Créer une table dans la base de données constituée d’un champ ‘login’ et d’un champ intitulé ‘motDePasse’

permettant de stocker des mots de passe cryptés avec l’algorithme MD5. Alimentez votre table avec quelques valeurs en prenant soin de crypter les mots de passe.

b) Créez un formulaire d’authentification (login + mot de passe) et affichez un message indiquant

« Authentification réussie » ou « login incorrect » ou « mot de passe incorrect ».

<?PHP

if (isset($_POST['prenom']) && isset($_POST['nom']) && isset($_POST['crypto']) &&

isset($_POST['numCB'])){

echo "<h2>Coordonn&eacute;es bancaires:</h2>\n";

echo "<p>".$_POST['prenom']." ".$_POST['nom'].", on connait votre num&eacute;ro de carte: ";

echo $_POST['numCB']." et votre cryptogramme:

".$_POST['crypto']."</p>\n";

setCookie('nom',$_POST['nom'],time()+10*60);

setCookie('nom',$_POST['nom'],time()+10*60);

setCookie('prenom',$_POST['prenom'],time()+10*60);

setCookie('numCB',$_POST['numCB'],time()+10*60);

setCookie('crypto',$_POST['crypto'],time()+10*60);

} else{

if (isset($_COOKIE['prenom']) && isset($_COOKIE['nom']) &&

isset($_COOKIE['crypto']) && isset($_COOKIE['numCB'])){

echo "<h2>Coordonn&eacute;es bancaires:</h2>\n";

echo "<p>".$_COOKIE['prenom']." ".$_COOKIE['nom'].", on connait votre num&eacute;ro de carte: ";

echo $_COOKIE['numCB']." et votre cryptogramme:

".$_COOKIE['crypto']."</p>\n";

echo "<p>Nous avons retrouv&eacute; ces informations bancaires dans les cookies de votre ordinateur !!!</p>\n";

} else{

echo "<h2>Coordonn&eacute;es bancaires:</h2>\n";

echo "<p>Elles nous sont inconnues car vous n'avez utilise ni le formulaire ni les cookies \n";

} }

?>

<?PHP

if (isset($_POST['login']) && isset($_POST['mdp'])){

if (empty($_POST['login'])) echo "<p>Login non renseigné dans le formulaire !</p>\n";

else{

// Recherche dans la base de données include('connexion.inc.php');

(7)

/* // Méthode de parcours de table en php.... Compliqué pour rien !!!

$req = "SELECT * FROM authentification;";

$result=mysqli_query($link,$req);

$trouve=FALSE;

$mdp=FALSE;

while(($ligne=mysqli_fetch_array($result)) && (! $trouve)){

if ($ligne[0]==$_POST['login']){

$trouve=TRUE;

if ($ligne[1]==md5($_POST['mdp'])){

$mdp=TRUE;

} }

}

if ($trouve && $mdp){

$authentifie=TRUE;

}

*/

// Méthode de recherche du login grâce à SQL

$req = "SELECT * FROM authentification WHERE login='".$_POST['login']."' AND motDePasse='".md5($_POST['mdp'])."';";

$result=mysqli_query($link,$req);

if (mysqli_num_rows($result)==1)

// if ($trouve && $mdp) echo "<p>Authentification r&eacute;ussie</p>\n";

// else{

// if ($trouve) echo "<p>Mot de passe incorrect.</p>\n";

// else echo "<p>Login inconnu dans notre base de données.</p>\n";

}}

} else{

echo "<p>Vous devez passser par le formulaire de saisie !!!</p>\n";

(8)

Exercice 3 : Authentification pour accéder à un site Inutile d’utiliser les sessions dans cet exercice.

b) A partir de votre formulaire d’authentification, accédez à une page (exemple : votre formulaire du TP précédent) si vous êtes authentifié. Si l’authentification a échoué, affichez de nouveau le formulaire d’authentification.

Conseil : Utiliser « header(‘location : url’) » pour rediriger vers l’url.

Invalide

valide submit

Recup_login.php

(9)

Recup_login.php

<?PHP

if (isset($_POST['login']) && isset($_POST['mdp'])){

// Recherche dans la base de données include('connexion.inc.php');

/* // Méthode de parcours de table en php.... Compliqué pour rien !!!

$req = "SELECT * FROM authentification;";

$result=mysqli_query($link,$req);

$trouve=FALSE;

$mdp=FALSE;

while(($ligne=mysqli_fetch_array($result)) && (! $trouve)){

if ($ligne[0]==$_POST['login']){

$trouve=TRUE;

if ($ligne[1]==md5($_POST['mdp'])){

$mdp=TRUE;

} }

}

if ($trouve && $mdp){

$authentifie=TRUE;

}

*/

// Méthode de recherche du login grâce à SQL

$req = "SELECT * FROM authentification WHERE login='".$_POST['login']."' AND motDePasse='".md5($_POST['mdp'])."';";

$result=mysqli_query($link,$req);

if (mysqli_num_rows($result)==1) header('location:form_BD.php');

else

header('location:form_login.html');

}

else header('location:form_login.html');

?>

(10)

Form_BD.php

<?php

/* connexion à la base de données (a faire dès le début, en tout cas pas dans un formulaire, sinon message invisible) */

include('connexion.inc.php');

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

// …/…

<option value="" selected="selected">-- service --</option>

<?php

$requete= "SELECT * FROM t_service;";

//$result=mysql_query($requete);

$result=mysqli_query($link,$requete);

while($ligne=mysqli_fetch_array($result)) echo '<option

value="'.$ligne['code_service'].'">'.$ligne['lib_service'].'</option>'."<br />\n";

?>

</select>

</p><p>

Loisirs <br />

<?php

$requete= "SELECT * FROM t_loisir;";

//$result=mysql_query($requete);

$result=mysqli_query($link,$requete);

while($ligne=mysqli_fetch_array($result)) {

echo '<input type="checkbox" name="loisirs[]" value="';

echo $ligne['code_loisir'];

echo '" />'.$ligne['lib_loisir']."<br/>\n";

}

//mysql_close();

mysqli_close($link);

?>

</p>

<p>

<input type="reset" name="reset" value="Effacez" />

<input type="submit" name="submit" value="Validez" />

</p>

</form>

</body>

</html>

(11)

Recherché.php

Exercice 4 : Authentification avec les sessions

L’exercice précédent n’a pas permis de protéger vos pages. En effet, il suffit de connaître les url des pages pour y accéder. Afin de protéger les pages et de s’assurer que l’utilisateur est authentifié, nous allons utiliser les sessions.

a) A l’authentification, les login et mots de passe seront mémorisés dans des variables de sessions b) A chaque page accédée, la vérification de la connaissance de ces variables de session sera vérifiée.

c) En cas d’accès à une page avec des variables de session incorrectes, on redirige automatiquement vers la page d’authentification.

Recup_login.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-Strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<title>Affichage d'une personne recherchée</title>

<link href="style.css" rel="stylesheet" type="text/css" />

</head>

<body>

<h1>Affichage d'une personne recherchée</h1>

<?php

/* connexion à la base de données (a faire dès le début, en tout cas pas dans un formualire, sinon message invisible) */

include('connexion.inc.php');

$nom=$_GET['nom'];

$requete="SELECT * FROM t_personne WHERE nom LIKE '$nom%'";

$result=mysqli_query($link,$requete);

$nb=mysqli_num_rows($result);

echo "<p>Il y a $nb enregistrement(s) trouvé(s)</p>";

echo '<p>';

while($ligne=mysqli_fetch_assoc($result)) // ou mysqli_fetch_array ou mysqli_fetch_row($result)

echo $ligne['num'].' - '.$ligne['nom'].' - '.$ligne['prenom'].' - '.$ligne['service']."<br />\n";

mysqli_close($link);

?>

</p>

</body>

</html>

// Méthode de recherche du login grâce à SQL

$req = "SELECT * FROM authentification WHERE login='".$_POST['login']."' AND motDePasse='".md5($_POST['mdp'])."';";

$result=mysqli_query($link,$req);

if (mysqli_num_rows($result)==1){

session_start();

$_SESSION['login']=$_POST['login'];

$_SESSION['mdp']=$_POST['mdp'];

header('location:form_BD.php');

} else

header('location:form_login.html');

}

else header('location:form_login.html');

(12)

form_recherche.php

Recherche.php

Exercice 5 : Affichage des variables de sessions et déconnexion

c) Une fois l’utilisateur authentifié, chaque page doit afficher en en-tête le nom de l’utilisateur.

Conseil : Utilisez un « include ».

Entete.inc.php

d) S’il y a erreur sur la personne, proposez une déconnexion et un renvoi vers la page d’authentification. Vous devez impérativement détruire la session !

Deconnexion.php

Exercice 6 : Nombre de sessions …

Essayez de compter et d’afficher le nombre de connexions sur une page en utilisant la même session.

Mettre un compteur dans une variable de session et incrémenter à chaque fois.

<?php

session_start();

/* connexion à la base de données (a faire dès le début, en tout cas pas dans un formulaire, sinon message invisible) */

if (!isset($_SESSION['login']) || ! isset($_SESSION['mdp'])) header('location:form_login.html');

include('connexion.inc.php');

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

<?php

session_start();

/* connexion à la base de données (a faire dès le début, en tout cas pas dans un formulaire, sinon message invisible) */

if (!isset($_SESSION['login']) || ! isset($_SESSION['mdp'])) header('location:form_login.html');

include('connexion.inc.php');

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

<?php

echo '<p style="color: blue; font-size: 70%";>';

echo "<i>Vous &ecirc;tes authentifi&eacute; ! Vous &ecirc;tes l'utilisateur

".$_SESSION['login'];

echo "</i><br/>";

echo "Si vous n'&ecirc;tes pas ".$_SESSION['login'].", cliquez sur ";

echo '<a href="deconnexion.php">d&eacute;connexion</a>.</p><hr/>'."\n";

?>

<?php

session_start();

session_destroy();

header("location:form_login.html");

?>

(13)

Exercice 7 (s’il vous reste du temps) : Authentification permettant d’accéder à une autre page

Dans cet exercice, le formulaire est public mais les résultats sont accessibles uniquement aux personnes authentifiées. De plus, le formulaire de saisie est inclus dans la page de recherche… On fera apparaître soit le formulaire, soit le résultat…

c) Récupérer une page d’un TP précédent (par exemple « recherche.php »)

d) Ajouter une authentification pour pouvoir accéder à cette page en respectant les consignes suivantes :

Tant que l(authentification est incorrecte, le formulaire de saisie de login et de mot de passe est affiché

Préférez les fichiers inclus aux « Copier/coller »

Authentification.php

Authentification.php est inclus dans recherche.php

Authentification.php appelle grâce aux include le form_login.php

<?PHP

// Méthode 1: sans header mais avec des include

$authentifie=FALSE;

if (isset($_POST['login']) && isset($_POST['mdp'])){

// Recherche dans la base de données include('connexion.inc.php');

// Méthode de recherche du login grâce à SQL

$req = "SELECT * FROM authentification WHERE login='".$_POST['login']."' AND motDePasse='".md5($_POST['mdp'])."';";

$result=mysqli_query($link,$req);

if (mysqli_num_rows($result)==1){

$authentifie=TRUE;

}

else include('form_login1.html');

}

else include('form_login1.html');

?>

Références

Documents relatifs

Si le numéro de la carte bancaire qui lui est présentée en paiement figure sur cette liste, le commerçant doit contacter l’émetteur de votre carte qui peut lui demander de

Le terminal du commerçant va dans un premier temps calculer Y1=f(info), f étant une fonction qui dépend de info c'est-à-dire des informations contenues sur la carte tel que

Sur tous les achats effectués chaque jeudi (hors carburant et livres et hors offre Familles Nombreuses), le montant des avantages sera doublé et crédité sur votre Carte de

Par exemple, d’après les rapports annuels de LCL, de 2001 à 2009 (les rapports antérieurs n’étant pas disponibles), la part des commissions nettes issues des moyens de paiement,

Cliquer dans la deuxième cellule en haut à droite, puis par menu Edition, puis Coller. Cliquer dans la proche cellule puis Edition,

La Banque attire en outre l'attention du titulaire sur le fait que les actes suivants sont, notamment et éventuellement, susceptibles d'entraîner des sinistres dont

Spcimen de carte bancaire de crdit Minibanque Carte Bleue Banque Crdit Mutuel Strasbourg Credit card Item n 47526543 1020 US1259.. Mon avis sur la banque en ligne Max Rousseaux

Pour être admissible à cette assurance, vous devez payer votre voyage en entier avec votre carte de crédit TD, des points Aéroplan qui y sont associés ou les deux..