Vous êtes sur la page 1sur 26

CRÉER UN

ESPACE SÉCURISÉ
DWWM

TIMMER JENNIFER 1
LES SESSIONS
DWWM

TIMMER JENNIFER 2
1- Les sessions
◦ La superglobale $_SESSION est un tableau associatif qui contient toutes les
variables de session.

◦ Une session est un mécanisme technique permettant de sauvegarder


temporairement sur le serveur des informations relatives à un internaute.

◦ À chaque ouverture de nouvelle session, l'internaute se voit attribué un identifiant


de session. Cet identifiant peut-être transmis soit en GET (PHPSESSID ajouté à la fin
de l’url)ou Cookie (cookie sur poste client) selon la configuration du serveur. Les
informations seront quant à elles transférées de page en page par le serveur et
non par le client.

◦ Une session peut contenir tout type de données : nombre, chaîne de caractères
et même un tableau.
TIMMER JENNIFER 3
1- Les sessions

◦ Utiliser la méthode du cookie est plus que recommandée : un


identifiant de session dans l'URL empêche de retenir l'adresse
d'une page simplement par le visiteur, cela rallonge donc
l'adresse de votre page.

◦ Cela nuit également au référencement de votre page. En effet,


l'identifiant étant unique, lorsque le robot du moteur de
recherche scanne votre site, il ne retombera jamais sur la même
URL plusieurs fois de suite.

TIMMER JENNIFER 4
1- Initialisation d’une session

◦ Nous allons utiliser une fonction native de php pour démarrer une session. Cette
fonction vérifie l’état de ma session courante : si elle existe on la poursuit, sinon on
la crée

<?php
Session_start();
?>

Avant d'utiliser les sessions sur une page, on doit toujours utiliser la fonction
session_start() placée avant tout envoi de code HTML, et donc généralement
tout en haut de votre page PHP

Nous appellerons cette fonction sur toutes les pages qui utilisent les sessions.

TIMMER JENNIFER 5
1- Initialisation d’une session

Pourquoi session_start() doit-elle être placée de la sorte ?


-> parce que si PHP utilise les cookies pour repérer quel est l'id de session utilisé par
l'internaute, il va écrire cet id de session dans un cookie. Or, le protocole HTTP
fonctionne de telle sorte que les en-têtes (qui permettent de dire à votre navigateur
"crée un cookie ayant tel nom et telle valeur") sont envoyés avant le premier
caractère HTML transmis.

Cela veut dire que dès que vous transmettrez un caractère HTML, les en-têtes seront
envoyés et vous ne pourrez plus les modifier, vous ne pourrez donc plus écrire le
cookie de session.

Vous vous retrouverez avec une erreur de headers already sent.

TIMMER JENNIFER 6
2- Lecture et écriture d’une session

Une session vide n’a aucune valeur et aucun intérêt. Nous allons donc lui
attribuer une valeur à sauvegarder.

Pour cela nous allons nous servir de la variable superglobale $_SESSION.

Pour créer une nouvelle variable de session, il faut ajouter une clé et une
valeur au tableau $_SESSION :

<?php
Session_start();
$_SESSION[‘login’]= ‘MonPseudo’;

Ici la valeur est MonPseudo et est associée à la clé login. La variable de


session est maintenant créée.

TIMMER JENNIFER 7
2- Lecture et écriture d’une session

Pour lire la valeur d’une variable de session, il suffit de faire un echo :

Echo $_SESSION[‘login’];

Pour lire l'identifiant courant de session :


echo session_id()

TIMMER JENNIFER 8
3- Destruction d’une session

Le serveur détruit lui-même les sessions au bout d’une vingtaine de minutes si


la session n’est pas renouvelée.

Il est possible de détruire la session grâce à la fonction session_destroy(), lors


d’une déconnexion d’un espace membre par exemple.

// On réinitialise et on vide le tableau de session


$_SESSION = array();

// On détruit la session
session_destroy();

TIMMER JENNIFER 9
LES COOKIES
DWWM

TIMMER JENNIFER 10
2- Les cookies
Un cookie est un fichier petit fichier texte que l'on stocke sur le
poste du visiteur.

Exemple :
Vous stockez le pseudo du visiteur. Lorsqu'il revient sur votre site,
vous pouvez lire dans le cookie et lui afficher "Bonjour
votre_pseudo".

TIMMER JENNIFER 11
1- Ecrire un cookie

La fonction PHP qui permet d'écrire un cookie est setcookie

setcookie (string nom, string valeur, string expiration, string chemin, string domaine,
string securise)

On utilise généralement les 3 premiers paramètres en respectant l'ordre:

- Le nom du cookie (ex : "Nom")


- La valeur du cookie (ex : "Paul")
- La date d'expiration du cookie, sous forme de timestamp

le 3éme paramètre définit la durée de vie pour du cookie, il sera ensuite supprimé.

TIMMER JENNIFER 12
1- Ecrire un cookie

Exemple :

<?php
$value = Cookie de test';

setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+3600); /* expire dans 1 heure */
?>

Comme pour session_start setcookie doit être placé avant votre code HTML.

Placez le avant la balise <!DOCTYPE>

TIMMER JENNIFER 13
2- Afficher un cookie

PHP va lire l'information stockée dans le cookie du visiteur.

Ces informations sont placées dans la superglobale $_COOKIE, sous forme


d'array (tableau)

<?php
// Afficher un cookie
echo $_COOKIE["TestCookie"];

// Une autre méthode pour afficher tous les cookies


print_r($_COOKIE);
?>

TIMMER JENNIFER 14
3- Modifier un cookie

Pour modifier la valeur d'un cookie, il faut faire appel à setcookie en


conservant le même nom de cookie et en modifiant simplement sa valeur.

4- Supprimer un cookie

Pour supprimer un cookie, Il suffit de déclarer le cookie sans mettre de valeur


<?php
// Pour supprimer le cookie Nom
setcookie("Nom");
?>

TIMMER JENNIFER 15
HACHER LES MDP
DWWM

TIMMER JENNIFER 16
1- Pourquoi hacher un mot de passe

- Il va de soi qu’il n’est pas acceptable de stocker en base les mots de passe
en clair.

- En tant qu’administrateur du système d’information, vous ne devriez pas être


capable de connaître les mots de passe de vos utilisateurs.

2- Fonctions de hachage
Ces fonctions sont particulièrement adaptées pour le stockage de mot de
passe :
- à partir du hash, il est impossible de retrouver directement le mot de passe
d’origine

- il est statistiquement impossible que deux mots de passe différents donnent


le même hash
TIMMER JENNIFER 17
2- Fonctions de hachage

- Pour vérifier la validité du mot de passe d’un utilisateur qui se connecte, il


suffit de calculer le hash du mot de passe envoyé et de le comparer à la
valeur stockée en base de données.
- Si les deux hashes sont identiques, le mot de passe est correct.

- Il existe de nombreuses fonctions de hachage : MD5, SHA-1, SHA-256, SHA-


512.

TIMMER JENNIFER 18
3- Limites du hachage

- Attaques par force brute :


Toutes les fonctions de hachage communément utilisées sont telles qu’il
n’existe pas de fonction inverse. L’idée la plus simple est donc de prendre
tous les mots de passes possibles, de calculer pour chacun son empreinte, et
de la comparer à l’empreinte que l’on veut cracker. Si les deux empreintes
sont identiques, on a trouvé le mot de passe, sinon on continue.  Problème :
c’est long

- Dictionnaire d’empreintes :
On calcule toutes les empreintes de tous les mdp possibles, puis on les garde
dans un fichier. Il suffira ensuite de chercher notre empreinte dans notre
fichier et de lire le mot de passe associé.  Problème : ça prend de la place

TIMMER JENNIFER 19
3- Limites du hachage

- Rainbow tables :
Les tables arc-en-ciel essayent de concilier taille de fichier et temps de calcul
raisonnable.
Une attaque par Rainbow table se déroule en 2 étapes. Il faut tout d’abord
générer une table, puis cracker une ou plusieurs empreintes à l’aide de cette
table.

- Retrouver un hash sur le net :


Il existe en effet des sites Web qui ont déjà pré-calculé des hash (MD5 ou
SHA-1) de petits messages et qui proposent des tables de correspondance
permettant de retrouver un message à partir de sa clé.
https://sha1.gromweb.com/

TIMMER JENNIFER 20
4- Utiliser des fonctions de hachage

La fonction password_hash() crée un nouveau hachage en utilisant un


algorithme de hachage fort et irréversible.

La fonction password_hash() est compatible avec la fonction crypt(). Aussi,


un mot de passe haché par la fonction crypt() peut être utilisé avec la
fonction password_hash().

password_hash ( string $password , mixed $algo , array $options = ? ) :


string|false

TIMMER JENNIFER 21
4- Utiliser des fonctions de hachage

password_hash ( string $password , mixed $algo , array $options = ? ) : string|false

Liste de paramètres :
password
Le mot de passe utilisateur.

algo
Une constante de l'algorithme de mot de passe représentant l'algorithme à utiliser
lors du hachage du mot de passe.

options
Un tableau associatif contenant les options.

TIMMER JENNIFER 22
5- Comment ca marche ?

En fait, à partir du moment où vous avez un mot de passe à hacher, il suffit d’un seul
appel de fonction :

$password = ‘JenniferAToujoursRaison';
$hash = password_hash($password, PASSWORD_DEFAULT);
var_dump($hash);

Utiliser PASSWORD_BCRYPT ou PASSWORD_DEFAULT revient donc aujourd’hui au même,


puisque le premier est celui par défaut ;

TIMMER JENNIFER 23
6- Vérifier si un mot de passe est correct

Pour cela, ici encore, une seule fonction à appeler, qui se charge de tout le travail :
password_verify().

Cette fonction attend en paramètres le mot de passe, et le hash que nous avions
stocké précédemment :

$password = ‘JenniferAToujoursRaison';
$hash = '$2y$10$0XPjx7G0kX1OxopwGQbsIehW/56X95vajb45APWz5EZx.aJpXEdli';

if (password_verify($password, $hash)) {
echo "OK";
}
else {
echo "KO";
}

En sortie, un simple true ou false, selon si le mot de passe correspond ou non au hash

TIMMER JENNIFER 24
ON ASSEMBLE
TOUT ÇA !
DWWM

TIMMER JENNIFER 25
Exercice Espace Membre

1- Créer l’algo d’une page de connexion avec toutes les possibilités


2- Créer les différentes pages (connexion, inscription, page sécurisée ou
autre)

TIMMER JENNIFER 26

Vous aimerez peut-être aussi