Sécuriser des pages web avec les sessions
Résolu
Mikebiz
Messages postés
28
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
A voir également:
- Sécuriser des pages web avec les sessions
- Web office - Guide
- Navigateur web - Guide
- Création site web - Guide
- Supprimer des pages sur word - Guide
- Comment traduire une page web - Guide
5 réponses
Bonjour,
Ce que fais votre code actuellement c'est : si on est connecté, alors on redirige vers la page accueil.php. Mais rien n'empêche l'utilisateur d'aller directement sur la page accueil.php sans faire la vérification.
La solution c'est de faire la vérification directement dans la page d'accueil. Si on est connecté, alors on affiche la page, sinon on affiche une erreur ou on redirige vers une autre page.
Comme ça, l'utilisateur ne pourra pas afficher le contenu de accueil.php sans passer par la vérification qu'il est connecté. Évidemment, il faut faire cette condition sur toutes les pages qui necessite d'être connecté.
Ce que fais votre code actuellement c'est : si on est connecté, alors on redirige vers la page accueil.php. Mais rien n'empêche l'utilisateur d'aller directement sur la page accueil.php sans faire la vérification.
La solution c'est de faire la vérification directement dans la page d'accueil. Si on est connecté, alors on affiche la page, sinon on affiche une erreur ou on redirige vers une autre page.
Comme ça, l'utilisateur ne pourra pas afficher le contenu de accueil.php sans passer par la vérification qu'il est connecté. Évidemment, il faut faire cette condition sur toutes les pages qui necessite d'être connecté.
Mikebiz
Messages postés
28
Date d'inscription
Statut
Membre
Dernière intervention
de quel fichier vous parlez?
quent217
Messages postés
420
Date d'inscription
Statut
Membre
Dernière intervention
347
>
Mikebiz
Messages postés
28
Date d'inscription
Statut
Membre
Dernière intervention
Je parles du premier que vous avez mis.
Bonjour,
Dans ton fichier de connexion, tu créés deux variables de session
Ce sont ces deux variables ( ou à minima la userid) qu'il faut ensuite utiliser dans
tes autres fichiers.
Dans les fichiers pour lesquels tu veux restreindre l'accès, tu places, au début de ces fichiers
Dans ton fichier de connexion, tu créés deux variables de session
$_SESSION['username'] = $username; $_SESSION['userid'] = $dn['id'];
Ce sont ces deux variables ( ou à minima la userid) qu'il faut ensuite utiliser dans
tes autres fichiers.
Dans les fichiers pour lesquels tu veux restreindre l'accès, tu places, au début de ces fichiers
<?php // démarrage des sessions session_start(); //affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //récupération PROPRE des variables AVANT de les utiliser : $userid = !empty($_SESSION['userid']) ? $_SESSION['userid'] : NULL; $username = !empty($_SESSION['username']) ? $_SESSION['username'] : NULL; //on vérifie si les variables de session existent sinon on redirige vers la page de connexion if(!$userid || !$username ){ header("Location: bad.php"); exit(); } // ensuite... tu peux mettre la suite du code de ta page.... // .... // require du config require_once 'config.php';
Bonjour Jordane45
Merci pour ta réponse. j'ai fait comme tu as dit, ça a marche d'un côté et ça ne marche pas de l'autre. Qu'est ce que je veux dis? Quand un utilisateur tente de se connecter à une page sans se logger ça le ramène directement à la page de connexion (bad.php) comme je le veux. Mais quand un utilisateur s'est bien logger (avec le login et mot de passe correcte), quand il clique sur le lien de la page ou se trouve le code de restriction, ça le ramène encore sur la page de connexion (bad.php). Qu'est ce qui peut être à l'origine?
Fichier connexion.php
Fichier adduser.php
Merci pour ta réponse. j'ai fait comme tu as dit, ça a marche d'un côté et ça ne marche pas de l'autre. Qu'est ce que je veux dis? Quand un utilisateur tente de se connecter à une page sans se logger ça le ramène directement à la page de connexion (bad.php) comme je le veux. Mais quand un utilisateur s'est bien logger (avec le login et mot de passe correcte), quand il clique sur le lien de la page ou se trouve le code de restriction, ça le ramène encore sur la page de connexion (bad.php). Qu'est ce qui peut être à l'origine?
Fichier connexion.php
<?php //affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); $_SESSION['username'] = $username; $_SESSION['password'] = $password; $_SESSION['userid'] = $dn['id']; // require du config require_once 'config.php'; // récupération propre des variables avant de les utiliser $username = !empty($_POST['username']) ? $_POST['username'] : NULL; $password = !empty($_POST['password']) ? $_POST['password'] : NULL; // $password = !empty($_POST['password']) ? $_POST['password'] : NULL; //traitement du formulaire ... //On verifie si le formulaire a ete envoye if($username && $password) { //On echappe les variables pour pouvoir les mettre dans des requetes SQL if(get_magic_quotes_gpc()) // get_magic_quotes_gpc => Cette fonction est OBSOLÈTE à partir de PHP 7.4.0. Dépendre de cette fonction est fortement déconseillé. { $username = mysqli_real_escape_string(stripslashes($username)); $password = stripslashes($password); } else { $username = mysqli_real_escape_string($int,$username); } //On recupere le mot de passe de lutilisateur $req = mysqli_query($int,'select password,id from users where username="'.$username.'"'); $dn = mysqli_fetch_array($req); //On le compare a celui quil a entre et on verifie si le membre existe if($dn['password']==$password and mysqli_num_rows($req)>0){ //Si le mot de passe es bon, on ne vas pas afficher le formulaire $form = false; //On enregistre son pseudo dans la session username et son identifiant dans la session userid $_SESSION['username'] = $username; $_SESSION['userid'] = $dn['id']; if(($username=='A2I-Planning') and ($password=='A2Iplanning@2020')) { header("Location: accueil.php"); exit; // toujours mettre un exit apres une redirection }else{ // si tu n'es pas admin... tu dois faire quoi ?? echo "Pas admin !"; } } else { //Sinon, on indique que la combinaison nest pas bonne header("Location: bad.php"); exit; // toujours mettre un exit apres une redirection } } ?>
Fichier adduser.php
<?php // démarrage des sessions session_start(); //affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //récupération PROPRE des variables AVANT de les utiliser : $userid = !empty($_SESSION['userid']) ? $_SESSION['userid'] : NULL; $username = !empty($_SESSION['username']) ? $_SESSION['username'] : NULL; $password = !empty($_SESSION['password']) ? $_SESSION['password'] : NULL; //on vérifie si les variables de session existent sinon on redirige vers la page de connexion if(!$userid || !$username ){ header("Location: bad.php"); exit(); } else{ header("Location: adduser.php"); exit(); } // ensuite... tu peux mettre la suite du code de ta page.... // .... // require du config include('config.php'); ?>
effectivement tu n'a pas mis de else mais ça ne marche pas sans le else
J'ai mis les session à var_dump mais c'est pareil.
Connexion.php
Fichier adduser.php
Connexion.php
<?php session_start(); //affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); var_dump($_SESSION['username'] = $username); var_dump($_SESSION['userid'] = $dn['id']); // require du config require_once 'config.php'; // récupération propre des variables avant de les utiliser $username = !empty($_POST['username']) ? $_POST['username'] : NULL; $password = !empty($_POST['password']) ? $_POST['password'] : NULL; //traitement du formulaire ... //On verifie si le formulaire a ete envoye if($username && $password) { //On echappe les variables pour pouvoir les mettre dans des requetes SQL if(get_magic_quotes_gpc()) // get_magic_quotes_gpc => Cette fonction est OBSOLÈTE à partir de PHP 7.4.0. Dépendre de cette fonction est fortement déconseillé. { $username = mysqli_real_escape_string(stripslashes($username)); $password = stripslashes($password); } else { $username = mysqli_real_escape_string($int,$username); } //On recupere le mot de passe de lutilisateur $req = mysqli_query($int,'select password,id from users where username="'.$username.'"'); $dn = mysqli_fetch_array($req); //On le compare a celui quil a entre et on verifie si le membre existe if($dn['password']==$password and mysqli_num_rows($req)>0){ //Si le mot de passe es bon, on ne vas pas afficher le formulaire $form = false; //On enregistre son pseudo dans la session username et son identifiant dans la session userid var_dump($_SESSION['username'] = $username); var_dump($_SESSION['userid'] = $dn['id']); if(($username=='A2I-Planning') and ($password=='A2Iplanning@2020')) { header("Location: accueil.php"); exit; // toujours mettre un exit apres une redirection }else{ // si tu n'es pas admin... tu dois faire quoi ?? echo "Pas admin !"; } } else { //Sinon, on indique que la combinaison nest pas bonne header("Location: bad.php"); exit; // toujours mettre un exit apres une redirection } } ?>
Fichier adduser.php
<?php // démarrage des sessions session_start(); //affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); var_dump($_SESSION['username'] = $username); var_dump($_SESSION['userid'] = $dn['id']); //récupération PROPRE des variables AVANT de les utiliser : $userid = !empty($_SESSION['userid']) ? $_SESSION['userid'] : NULL; $username = !empty($_SESSION['username']) ? $_SESSION['username'] : NULL; //on vérifie si les variables de session existent sinon on redirige vers la page de connexion if(!$userid || !$username ){ header("Location: bad.php"); exit(); } // ensuite... tu peux mettre la suite du code de ta page.... // .... // require du config require_once 'config.php'; ?>
ok, je l'ai fait mais toujours pareil
fichier adduser.php
Fichier connexion.php
fichier adduser.php
<?php // démarrage des sessions session_start(); var_dump($_SESSION); //affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); $_SESSION['username'] = $username; $_SESSION['password'] = $password; $_SESSION['userid'] = $dn['id']; //récupération PROPRE des variables AVANT de les utiliser : $userid = !empty($_SESSION['userid']) ? $_SESSION['userid'] : NULL; $username = !empty($_SESSION['username']) ? $_SESSION['username'] : NULL; //on vérifie si les variables de session existent sinon on redirige vers la page de connexion if(!$userid || !$username ){ header("Location: bad.php"); exit(); } // ensuite... tu peux mettre la suite du code de ta page.... // .... // require du config require_once 'config.php'; ?>
Fichier connexion.php
<?php session_start(); var_dump($_SESSION); //affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); $_SESSION['username'] = $username; $_SESSION['password'] = $password; $_SESSION['userid'] = $dn['id']; // require du config require_once 'config.php'; // récupération propre des variables avant de les utiliser $username = !empty($_POST['username']) ? $_POST['username'] : NULL ; $password = !empty($_POST['password']) ? $_POST['password'] : NULL ; //traitement du formulaire ... //On verifie si le formulaire a ete envoye if($username && $password) { //On echappe les variables pour pouvoir les mettre dans des requetes SQL if(get_magic_quotes_gpc()) // get_magic_quotes_gpc => Cette fonction est OBSOLÈTE à partir de PHP 7.4.0. Dépendre de cette fonction est fortement déconseillé. { $username = mysqli_real_escape_string(stripslashes($username)); $password = stripslashes($password); } else { $username = mysqli_real_escape_string($int,$username); } //On recupere le mot de passe de lutilisateur $req = mysqli_query($int,'select password,id from users where username="'.$username.'"'); $dn = mysqli_fetch_array($req); //On le compare a celui quil a entre et on verifie si le membre existe if($dn['password']==$password and mysqli_num_rows($req)>0){ //Si le mot de passe es bon, on ne vas pas afficher le formulaire $form = false; //On enregistre son pseudo dans la session username et son identifiant dans la session userid var_dump($_SESSION['username'] = $username); var_dump($_SESSION['userid'] = $dn['id']); if(($username=='A2I-Planning') and ($password=='A2Iplanning@2020')) { header("Location: accueil.php"); exit; // toujours mettre un exit apres une redirection }else{ // si tu n'es pas admin... tu dois faire quoi ?? echo "Pas admin !"; } } else { //Sinon, on indique que la combinaison nest pas bonne header("Location: bad.php"); exit; // toujours mettre un exit apres une redirection } } ?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Est-ce que tu peux modifier ton fichier adduser comme ceci et nous montrer ce que ça t'affiche ?
<?php //----------------------------// //fichier adduser.php //----------------------------// // démarrage des sessions session_start(); //affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); /* FAUX ET ARCHI FAUX !! -- GROSSE ERREUR !! LA TU ECRASES LES VARIABLES !!!!! $_SESSION['username'] = $username; $_SESSION['password'] = $password; $_SESSION['userid'] = $dn['id']; */ //récupération PROPRE des variables AVANT de les utiliser : $userid = !empty($_SESSION['userid']) ? $_SESSION['userid'] : NULL; $username = !empty($_SESSION['username']) ? $_SESSION['username'] : NULL; //on vérifie si les variables de session existent sinon on redirige vers la page de connexion if(!$userid || !$username){ //header("Location: bad.php"); echo " UTILISATEUR NON CONNECTE ! "; echo "<pre>"; var_dump($_SESSION); echo "</pre>"; exit(); } // ensuite... tu peux mettre la suite du code de ta page.... // .... // require du config require_once 'config.php'; //JUSTE POUR VOIR SI TU ES CONNECTE.... echo " JE SUIS CONNECTE !!! "; ?>