Chapitre 5
GESTION DES UTILISATEURS
D'UN SITE INTERNET
 
 
Précédent Suivant
 

Gestion des utilisateurs
d'un site Internet
Pourquoi gérer des utilisateurs ?
* Pour identifier les acteurs
* Différents rôles
* Rédaction de commentaires (visiteur)
* Rédaction d'articles (rédacteur)
* Vérification du contenu (modérateur)
* Traçabilité des données
* Suivi des contributions de chacun
* Responsabilités et droits des auteurs
* Modération du contenu
* Exclusion d'un utilisateur
Inscription
* Inscription simple
* Login et mot de passe
* Validation automatique
* Inscription avancée
* Informations personnelles
* Courier électronique
* Procédure de vérification
* Procédure de vérification
* Anti-robot à l'inscription: "CAPTCHA"
* Procédure de vérification par courrier
* Electronique
* Postal
Réglementation sur les données personnelles
* Protection de la vie privée
* Utilisation du numéro INSEE soumise à autorisation
* Déclaration à la CNIL
* Commission Nationale de l'Informatique et des Libertés
* http://www.cnil.fr
* Déclaration
* Type de données
* Durée de stockage
* Utilisation
* Droit de l'utilisateur
* Regard
* Modification
* Suppression
Modélisation du site pour le cinéma
* Proposer un diagramme des cas d'utilisation
et un diagramme de classes pour la gestion des utilisateurs
* Proposer un modèle entité-association de la base de données
pour la gestion des utilisateurs
* Quelles sont les modifications à apporter aux tables existantes ?
* Proposer un schéma de navigation
et une esquisse des pages pour la gestion des utilisateurs
* Quelles sont les modifications à apporter au schéma existant ?
Cas d'utilisation: identification
Cas d'utilisation: inscription
Cas d'utilisation: gestion
Diagramme de classes: utilisateurs
Modèle entité-association
Mémoriser des données entre pages
* Exemple: l'identifiant d'un utilisateur
* Vérification de l'identité d'un utilisateur
* Ensuite, utilisation de son identifiant
* Méthodes de transfert "get" et "post"
* Transfert de données entre pages
* Echange de l'identifiant de l'utilisateur à chaque fois
* Lourdeur du procédé
* Problème de sécurité
* Idéalement, il faudrait des "variables globales"
* Zone d'échange entre différentes pages
* Il existe deux mécanismes
* Côté client: les cookies
* Côté serveur: les sessions
Qu'est-ce qu'un cookie ?
* Donnée stockée par un serveur chez le client
* Ordre du serveur en réponse à une requête HTTP
* Reçu et interprété par le navigateur
* Données stockées sous forme texte sur la machine
* Mémorise de l'information entre deux visites
* A chaque requête HTTP, le(s) cookie(s) sont transmis
* Seuls les cookies du site concerné sont envoyés
* Permet de mémoriser
* Identifiant d'un utilisateur
* Préférences / options sur le site
* Pages visitées par un client
Côté client: les cookies
Cookie en PHP (1/2)
* setcookie(string $nom,string $valeur,
int $expiration,string $chemin,
string $domaine,int $securise)
* $nom et $valeur: nom et valeur du cookie
* $expiration: date de suppression du cookie
* Nombre de secondes depuis le 1 janvier 1970
* time(): pour la date courante
* mktime($h,$m,$s,$m,$j,$a): pour une date donnée
* $chemin: chemin dans le site où le cookie est valide
* "/" (la racine du site) par défaut
* $domaine: nom du domaine où le cookie est valide
* ".nawouak.net" signifie les adresses "http://*.nawouak.net"
* Attention au premier "." dans le nom du domaine
* $securise: envoi du cookie par protocole sécurisé (HTTPS) ?
* Valeur 1 signifie un envoi sécurisé
* Par défaut, non sécurisé
Cookie en PHP (2/2)
* Placé avant l'envoi de l'entête au client
* Avant balise <html>
* Avant toute commande "echo"
* Supprimer un cookie
* Affecter une date d'expiration dans le passé
* setcookie("mon_cookie","",time()-3600);
* Exemple
* Création: setcookie("nom","Nawouak",time()+3600);
* Récupération: echo $_COOKIE["nom"];
* Tous les cookies associés à un nom de domaine
sont transmis à chaque requête HTTP sur ce domaine
Avantages et inconvénients des cookies
* Avantages
* Peut conserver des données entre deux visites
* Durée de vie des données contrôlée
* Mort programmée par le serveur
* Le client peut détruire les données
* Nettoyage par le navigateur
* Inconvénients
* Le client peut refuser les cookies
* Quantité de données stockées limitée
* 300 cookies par client
* 20 cookies par domaine
* 4000 octets par cookie
* Problème de sécurité
* Echange de données entre client et serveur
* Par défaut, aucune sécurisation
* Possibilité de sécuriser le transfert
* Données stockées chez le client
* Possibilité de récupérer le cookie d'un autre
Qu'est-ce qu'une session ?
* Correspond à une visite d'un utilisateur
* Identifiant attribué aléatoirement au début de la visite
* Identifiant transmis à chaque page durant la visite
* Identifiant = SID (Session IDentifier)
* L'identifiant permet d'échanger des données entre pages
* Zone de stockage attribuée pour l'identifiant sur le serveur
* Une page peut déposer des informations dans la zone
* Une autre peut récupérer ces informations dans la zone
* L'identifiant doit être transmis entre les pages
* Plusieurs méthodes de transmission
Côté serveur: les sessions
Session en PHP
* Fonction "session_start" ouvre une session
* Création d'un nouvel SID si l'utilisateur n'en a pas
* Sinon, récupération du SID de l'utilisateur
* A partir du SID, récupération des données de la session
* Procédure totalement automatique
et indépendante de la méthode de transmission
* Données stockées dans le tableau associatif "_SESSION"
* Ajout d'une variable: $_SESSION["nom_variable"] = valeur;
* Récupération d'une variable: echo $_SESSION["nom_variable"];
* Suppression d'une session ? "logout"
* session_destroy();
* Données de la session détruites
* SID rendu invalide
* Utiliser ces commandes avant tout affichage
* Avant la balise <html>
* Avant toute commande "echo"
Méthodes de transmission de l'identifiant
* Passage de l'identifiant en paramètre dans l'URL
* Exemple: index.php?sid=1234567890
* $nom = session_name(): nom du paramètre
* $sid = session_id(): identifiant de la session
* echo "<a href='index.php?$nom=$sid'>...</a>";
* Paramètre récupéré automatiquement dans la page cible
* Transmission automatique et invisible par l'URL
* Méthode précédente mais totalement transparente
* Configuration de PHP: option "session.use_trans_id"
* Cookie contenant l'identifiant
* Cookie transmis dans chaque requête HTTP
* Configuration de PHP: option "session.use_cookies"
* Problème si le client refuse les cookies
* Choix de la méthode effectué à la configuration du serveur
* Transmission de l'identifiant souvent transparente
Avantages et inconvénients des sessions
* Avantages
* Fonctionne toujours, le client ne peut pas refuser
* Aucune limite à la quantité de données stockées
* Pas d'échange de données avec le client
* Plus de problème de sécurité
* Données uniquement stockées sur le serveur
et consultables seulement à partir du SID
* Inconvénients
* Durée de vie limitée au temps de la visite
* Impossible de conserver des données entre deux visites
* La session peut être fermée pendant la visite
* Durée de vie de la session programmée
* Réinitialisation du compteur de vie à chaque accès au site
* Aucun accès pendant une durée donnée
==> fermeture de la session
Authentifier un utilisateur
* Page de connexion
* Saisie du login et du mot de passe
* Vérification de leur validité
* Sauvegarde login + m.d.p. dans une session
* Autres pages
* Récupération login + m.d.p. de la session
* Vérification de leur validité
* Si non valide, retour à la page de connexion
* Pourquoi stocker login + m.d.p. au lieu de l'identifiant ?
* L'identifiant peut devenir invalide
* Exemple: utilisateur supprimé pendant la visite
Exercice: connexion d'un utilisateur
* Ecrire un formulaire de saisie des identifiants
* Ecrire une page de vérification des identifiants
* Vérification dans la base "utilisateur"
* Si valide
* Mémoriser les identifiants dans une session
* Rediriger sur une page de contenu
* Si non valide
* Rediriger sur une page d'inscription
* Ecrire une page de contenu
* Afficher l'utilisateur connecté
* Ecrire une page de validation d'une inscription
* Vérifier que l'utilisateur connecté est un administrateur
* Afficher toutes les inscriptions à valider
* Proposer un lien pour accepter (accept.php?id=xx)
* Proposer un lien pour refuser (reject.php?id=xx)
Sécurité: pourquoi crypter les mots de passe ?
* Le problème
* Souvent, même mot de passe pour plusieurs accès
* Les administrateurs peuvent voir les mots de passe
* Le risque
* Serveur craqué = personne non autorisée devient administrateur
* Les mots de passe permettent l'accès à des sites plus sensibles
* Cryptage par fonction de hachage
* Considéré comme une forme puissante de cryptage
* Génère une valeur quasi unique à partir d'un texte
* Processus supposé à sens unique
* Puissance de calcul inimaginable pour inverser le processus
Cryptage des mots de passe (1/2)
Cryptage des mots de passe (2/2)
* Utilisation de la fonction de cryptage de MySQL
* Vérification
SELECT * FROM utilisateur
WHERE (login='$login' AND mdp=MD5('$password'))
* Ajout
INSERT INTO utilisateur (login,mdp)
VALUES ('$login',MD5('$password'))
* Utilisation de la fonction de cryptage de PHP
* if ($enr["mdp"] == md5($password)) ...
* Attention: l'encodage de l'attribut est précis !