IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Sécuriser mon espace membre


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Aucun
    Inscrit en
    Mai 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Mai 2020
    Messages : 9
    Par défaut Sécuriser mon espace membre
    Bonjour à tous, je suis nouveau ici et je me replonge dans le php depuis peu. J'ai quelques bases mais rien d'exceptionnel Mais c'est comme le vélo ça ne s'oublie pas !

    Enfin bref, tôt ou tard j'aurais eu besoin d'aide et je crois que le moment est venu

    Sur mon espace membre j'ai un espace admin. Lorsque qu'un utilisateur se connecte, si il est "user" il est redirigé sur la page index.php, si il est "admin" sur la page /admin/home.php.

    Ca fonctionne très bien mais le problème c'est qu'un utilisateur qui rentre l'url /admin/home.php y accède sans problème.

    Donc voici mon code de base sur index.php et sur /Admin/home.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    	session_start();
    	if(!isset($_SESSION["username"])){
    		header("Location: login.php");
    		exit(); 
    	}
    ?>
    Pour résoudre le problème j'ai modifié comme ceci le fichier /admin/home.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    	session_start();
    	if(!isset($_SESSION["username" || $user['type'] == 'user'])){
    	header("Location: ../login.php");
    		exit(); 
    	}
    ?>
    Pour les "user" aucun problème tout fonctionne et pas d'accès à la page /admin.home.php mais en revanche les "admin" ne peuvent même plus se connecté... Lorsqu'il se connecte la page de connexion charge à nouveau. les ID et MDP de l'admin sont correctes car quand je rentre de mauvaises informations il m'affiche "mot de passe ou identifiant incorrect"

    Merci d'avoir pris le temps de lire

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 54
    Par défaut
    Bonjour Aziard
    Citation Envoyé par Aziard Voir le message
    Pour les "user" aucun problème tout fonctionne et pas d'accès à la page /admin.home.php mais en revanche les "admin" ne peuvent même plus se connecté... Lorsqu'il se connecte la page de connexion charge à nouveau
    Je pense est due au fait que tu ne tiens pas compte du type admin dans ton code, tu ne teste que user.

    Essai ce schéma
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    session_start();  
    if(!isset($_SESSION["username"]))
    {  
    	page login
    }
    elseif($_SESSION["type"] == 'admin')
    {  
    	page admin
    }
    else
    {  
    	page user
    }

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Aucun
    Inscrit en
    Mai 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Mai 2020
    Messages : 9
    Par défaut
    Bonjour et merci pour ta réponse,
    Le code que tu m'a donné c'est celui que je vais mettre sur ma page admin/home.php
    Mais ça ne pose pas de problème le fait que que si je suis admin je sois renvoyer sur cette même page ?
    Car page admin c'est home.php.

    Je vais essayer ça dès que je peux !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    tu as surtout un problème de CONCEPTION.

    Quand un utilisateur se connecte, tu dois enregistrer :
    • $_SESSION["username"]
    • $_SESSION["type"]


    Pour protéger chaque page "admin", il suffit alors de mettre au début :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    if( empty($_SESSION["username"]) || empty($_SESSION["type"]) || $_SESSION["type"] != 'admin' )
    {
       header('location:login.php');
       exit; // important
    }
    // Sinon, OK, on continue...

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Aucun
    Inscrit en
    Mai 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Mai 2020
    Messages : 9
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    empty($_SESSION["type"])  'admin' )
    Oui j'ai un peu de mal à saisir.. La on lui dit que si le champs 'type' est vide il est redirige ? C'est bien ça ? Et ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    || $_SESSION["type"] != 'admin' )
    Et la :
    Ou champs 'type' = user plutôt ? Car si il est user il est redirige si il est admin c'est bon

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Aucun
    Inscrit en
    Mai 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Mai 2020
    Messages : 9
    Par défaut
    J'ai essayé comme tu dis mais le problème est toujours le même. la page de login se charge à nouveau lorsque l'admin s'identifie.
    J'ai vérifié dans ma base de donnée et la colonne 'type' existe bien avec comme valeur 'user' ou 'admin'.

    J'ai essayé le code suivant sur ma page index:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <p>Identifiant: <?php echo $_SESSION['username']; ?></p>
    <p>Rang: <?php echo $_SESSION['type']== ''; ?></p>
    Il m'affiche bien l'identifiant, mais pour le type il m'affiche toujours '1' admin comme user..

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si tu ne montres pas ton script de connexion, on ne peut pas le deviner, ni le corriger.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Aucun
    Inscrit en
    Mai 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Mai 2020
    Messages : 9
    Par défaut
    Voici mes codes:

    Login.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    <?php
    require('config.php');
    session_start();
     
    if (isset($_POST['username'])){
    	$username = stripslashes($_REQUEST['username']);
    	$username = mysqli_real_escape_string($conn, $username);
    	$_SESSION['username'] = $username;
    	$password = stripslashes($_REQUEST['password']);
    	$password = mysqli_real_escape_string($conn, $password);
        $query = "SELECT * FROM `users` WHERE username='$username' and password='".hash('sha256', $password)."'";
    	$result = mysqli_query($conn,$query) or die(mysql_error());
     
    	if (mysqli_num_rows($result) == 1) {
    		$user = mysqli_fetch_assoc($result);
    		// vérifier si l'utilisateur est un administrateur ou un utilisateur
    		if ($user['type'] == 'admin') {
    			header('location: admin/home.php');		  
    		}else{
    			header('location: index.php');
    		}
    	}else{
    		$message = "Le nom d'utilisateur ou le mot de passe est incorrect.";
    	}
    }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    	<link rel="stylesheet" href="style.css" />
    </head>
    <body>
    <form class="box" action="" method="post" name="login">
    <h1 class="box-logo box-title">Site</h1>
    <h1 class="box-title">Connexion</h1>
    <input type="text" class="box-input" name="username" placeholder="Nom d'utilisateur">
    <input type="password" class="box-input" name="password" placeholder="Mot de passe">
    <input type="submit" value="Connexion " name="submit" class="box-button">
    <?php if (! empty($message)) { ?>
        <p class="errorMessage"><?php echo $message; ?></p>
    <?php } ?>
    </form>
    </body>
    </html>

    /admin/home.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?php
    	session_start();
    	if(!isset($_SESSION["username"])){
    		header("Location: ../login.php");
    		exit(); 
    	}
    ?>
    <!DOCTYPE html>
    <html>
    	<head>
    	<link rel="stylesheet" href="../style.css" />
    	</head>
    	<body>
    		<div class="sucess">
    		<h1>Bienvenue <?php echo $_SESSION['username']; ?>!</h1>
    		<p>C'est votre espace admin.</p>
    		<a href="add_user.php">Add user</a> | 
    		<a href="#">Update user</a> | 
    		<a href="#">Delete user</a> | 
    		<a href="../logout.php">Déconnexion</a>
    		</ul>
    		</div>
    	</body>
    </html>
    Pour la page index elle commence comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    	session_start();
    	if(!isset($_SESSION["username"])){
    		header("Location: login.php");
    		exit(); 
    	}
    ?>

  9. #9
    Invité
    Invité(e)
    Par défaut
    Si tu ne mets pas le "type" en session, comment veux-tu pouvoir le vérifier ?

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Aucun
    Inscrit en
    Mai 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Mai 2020
    Messages : 9
    Par défaut
    Oui là j'ai partagé mon code de base. mais en rajoutant ceci à /admin/home.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    	session_start();
    if(empty($_SESSION["username"]) || empty($_SESSION["type"]) || $_SESSION["type"] != 'admin' ){
    		header("Location: ../login.php");
    		exit(); 
    	}
    ?>
    Personne n'a accès à l'espace admin. Même l'admin quand je valide les identifiant il me redirige à nouveau sur la page login.
    J'ai beau essayé quoi que ce soit, rien ne fonctionne. Soit personne n'y à accès soit tous le monde. J'ai vérifié ma base de donnée et tout semble correct


    J'ai essayé avec cec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    	session_start();
    if(!isset($_SESSION["username"]) || $_SESSION["username"] != 'admin'){
    		header("Location: ../login.php");
    		exit(); 
    	}
    ?>
    Dans ce cas, ça fonctionne. Seul soucis, c'est que le pseudo doit être 'admin'. Mais ce n'est pas encore trop gênant dans mon cas

  11. #11
    Invité
    Invité(e)
    Par défaut
    Login.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
    require('config.php');
    session_start();
     
    unset( $_SESSION["username"] );
    unset( $_SESSION["type"] );
     
    ...
    		$user = mysqli_fetch_assoc($result);
     
    		$_SESSION["type"] = $user['type']; // mise en SESSION du "type"
     
    		// vérifier si l'utilisateur est un administrateur ou un utilisateur
    		if ($user['type'] == 'admin') {
    			header('location: admin/home.php');		  
    		}else{
    			header('location: index.php');
    		}
    ...

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Aucun
    Inscrit en
    Mai 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Mai 2020
    Messages : 9
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
    require('../config.php');
    session_start();
     
    unset( $_SESSION["username"] );
    unset( $_SESSION["type"] );
     
    		$user = mysqli_fetch_assoc($result);
     
    		$_SESSION["type"] = $user['type']; // mise en SESSION du "type"
     
    		// vérifier si l'utilisateur est un administrateur ou un utilisateur
    		if ($user['type'] == 'admin') {
    			header('location: admin/home.php');		  
    		}else{
    			header('location: ../index.php');
    		exit(); 
    	}
    ?>
    Toujours le même soucis, l'admin s’identifie et il revient sur la page de login. Je n'y comprends rien

    J'ai essayé de créer un champs 'rang' dans la base de donnée et d'ajouter la valeur 1 pour les admins et de laisser vide pour les users.
    Je ne sais pas si je m'y prend bien ou non mais, même avec ça je n'y arrive toujours pas

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Aucun
    Inscrit en
    Mai 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Mai 2020
    Messages : 9
    Par défaut
    Par exemple en haut de la page:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    	session_start();
    	if(!isset($_SESSION["username"])){
    		header("Location: login.php");
    		exit(); 
    	}
     
    ?>
    Et pour le bouton Administration: (visible seulement par les admins)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php if($_SESSION["username"] == admin)
                    { echo '<a href="logout.php" class="button special">Administration</a>';
                    }
     ?>
    Là tout fonctionne pas de soucis. Mas j'ai créer le champ rang dans la base de donnée avec la valeur '1' pour les admins. et lorsque je modifie mon bouton comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php if($_SESSION["rang"] == 1)
                    { echo '<a href="logout.php" class="button special">Administration</a>';
                    }
     ?>
    Ca ne fonctionne plus et tous le monde voit le bouton. J'ai raté quelque chose ? Si quelqu'un voit le problème et peut m'expliquer. J'essaie de comprendre

  14. #14
    Invité
    Invité(e)
    Par défaut
    Je crois que tu ne comprends pas grand chose au code...

    ...du coup, c'est difficile de t'expliquer.

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Aucun
    Inscrit en
    Mai 2020
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Mai 2020
    Messages : 9
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Je crois que tu ne comprends pas grand chose au code...

    ...du coup, c'est difficile de t'expliquer.
    Oui je n'y connais pas grand chose, mais j'essaie différentes choses et j'essaie de comprendre en faisant mais tout ne fonctionne pas

Discussions similaires

  1. Que pensez vous de la sécurité de mon espace membre?
    Par diodio13fr dans le forum Langage
    Réponses: 28
    Dernier message: 07/09/2011, 17h46
  2. Recherche dans mon espace membre [SQL]
    Par BuXx57 dans le forum Débuter
    Réponses: 1
    Dernier message: 19/07/2011, 17h24
  3. [1.x] Lier sfDoctrineGuardPlugin à mon espace membre
    Par etoileweb dans le forum Débuter
    Réponses: 35
    Dernier message: 23/11/2010, 12h39
  4. Sécuriser un espace membres
    Par novphp dans le forum Langage
    Réponses: 2
    Dernier message: 05/02/2009, 23h39
  5. [Forum] Quel forum pour mon espace membre
    Par okoweb dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 28/08/2008, 01h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo