Problème de connexion, sécurité

Résolu/Fermé
Gui4671 Messages postés 33 Date d'inscription jeudi 24 janvier 2019 Statut Membre Dernière intervention 7 avril 2019 - Modifié le 30 janv. 2019 à 14:30
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 30 janv. 2019 à 17:32
Bonjour,
J'ai fait une page de connexion (identifiant et mdp) qui redirige vers la page d'accueil si les informations sont correctes. Les informations de connexion se trouve dans une BDD.
Je souhaite mettre sur la page d'accueil un lien qui permet à chacun de se déconnecter.
Mais je souhaite surtout empêcher l'accès à la page d'accueil s'il n'y a pas eu de connexion. (Redirection sur la page de connexion.) Je n'arrive pas à bloquer l'accès si pas de connexion, comment faire?

Voici ma page de connexion:
<?php include('connexion.php'); ?> <!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Connexion</title>

        <style>

            body
            {
                background: rgba(255,221,95,1);
            }

         header 
         {
          height: 210px;
          border: 2px solid black;
          text-align: center;
          padding: 10px;
          margin: 20px;
         }
          
            ul#menu_horizontal li 
            { 
                display : inline;
                padding : 0 0.5em;
                border: 1px black;
            }

            ul#menu_horizontal 
            {
                list-style-type : none; 
            }
          
           p
           {
              text-align: center;
           }

            table
            {
                text-align: center;
                margin: auto;
                width: 95%;

            }

         footer
         {
          height: 100px;
          border: 2px solid black;
          text-align: center;
          padding: 10px;
          margin: 5px;
         }

a
{
    border: 1px blue;
}
          
        </style>

    </head>
    <body>
     <header> 
        <br>
         <h1>Bienvenue sur le serveur de Guillaume.B</h1>
           <h2>MAINTENANCE</h2>
          <p>Site de gestion indisponible jusqu'au 30-01-19 à 00h00. Veuillez nous excuser!</p>
   
          <ul id="menu_horizontal">  
            <li><a style="color: blue" href="accueil.php">Accueil</a></li>
            <li><a style="color: blue" href="index.php">Me <?php if(isset($_SESSION['user'])){echo"dé";}?>connecter</a></li>
            <li><a style="color: blue" href="contactadm.php">Contacter l'administrateur</a></li>
            <li><a style="color: blue" href="inscription.php">S'inscrire</a></li>
            </ul>
        </header>
        <br>
        <br>
        <?php
            if(isset($_SESSION['user'])) {
                session_unset();
                session_destroy();
                header('Location: accueil.php'); 
            } else {
                if(!empty($_POST)) {
                    // Tentative de connexion
                    $valid=true;
                    if(!isset($_POST['username']) || empty($_POST['username'])) {
                        echo "<div class='bandeau bandeau-error'>Merci de renseigner votre identifiant.</div>";
                        $valid=false;
                    }
                    if(!isset($_POST['password']) || empty($_POST['password'])) {
                        echo "<div class='bandeau bandeau-error'>Merci de renseigner votre mot de passe.</div>";
                        $valid=false;
                    }
    
                    if($valid) {
                        $username = htmlspecialchars($_POST['username']);
                        $password = htmlspecialchars($_POST['password']);
                       $result = test_connexion($dbh, $username, $password);
                        if(count($result)>=1){
                            $user_infos = $result[0];
                            $_SESSION["user"]=$user_infos;                            
                            header('Location: index.php'); 
                            echo "u";
                        } else {
                            echo "<div class='bandeau bandeau-error'>Identifiants incorrects.</div>";
                        }
                    }
                }
            }
        ?>
        <table border=1 width=100% align="center" cellspacing=0 cellpadding=0 >
            <tr>
                <td width="100%"><h3>Me connecter:</h3>
                <form method="POST" action="index.php">
                    <input type="text" name="username" placeholder="Identifiant" required/>
                    <input type="password" name="password" placeholder="Mot de passe" required/>
                    <input type="submit" /><br /><br />
                </form>
            </td>
        </table>
      <p>Si vous avez perdu votre mot de passe, veuillez cliquer sur le lien suivant et suivre les instructions suivantes.
        <a href="mdpperdu.php">Mot de passe oublié?</a></p>
 
    </body>
</html>


Voici ma page d'accueil:
<?php include('connexion.php'); ?> <!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Accueil</title>

        <style>

            body
            {
                background: rgba(255,221,95,1);
                  margin: 5px;
            }

            header 
            {
                height: 220px;
                border: 2px solid black;
                text-align: center;
                padding: 10px;
                margin: 5px;
            }

            table
            {
                text-align: center;
                margin: auto;
                width: 90%;
            }

            ul#menu_horizontal li 
            { 
                display : inline;
                padding : 0 0.5em;
                border: 1px black;
            }

            ul#menu_horizontal 
            {
                list-style-type : none; 
            }

            a
            {
                border: 1px blue;
            }
        </style>

    </head>
    <body>
        <header>
            <br>
             <h1>Serveur Guillaume.B</h1>
             <h2>Accueil:</h2>

                <ul id="menu_horizontal">
                <li><a href="accueil.php">Accueil</a></li>
                <li><a href="codeur.php">Codeur/Décodeur</a></li>
                <li><a href="/gestion/connexion.php">Site de gestion</a></li>
                <li><a style="color: blue" href="contactadm.php">Contacter l'administrateur</a></li>
                
                <?php
                    if(isset($_SESSION['user'])){
                ?>
                    <li><a href="update-password.php">Changer mot de passe</a></li>
                <?php
                    }
                ?>

                <li><a style="color: red" href="index.php">Me <?php if(isset($_SESSION['user'])){echo"dé";}?>connecter</a></li> 
                </ul>
        </header>
            <br>
            <br>   
        <section>
                <table style="text-align: center" border=1 width=90% height="50px" align="center" cellspacing=0 cellpadding=0 >
                    <tr>
                        <td>
                            Notre codeur-décodeur permet de discuter avec un language illisible sans traduction. La traduction des mots, phrases, textes se fait sur le site.   Cliquez sur le lien pour coder ou décoder.<br>
                            <a href="codeur.php">Codeur/Décodeur</a>
                        </td>
                    </tr>
                </table>
            <br>
                <table style="text-align: center" border=1 width=90% height="50px" align="center" cellspacing=0 cellpadding=0>
                    <tr>
                        <td>
                          Le site de gestion n'est pas disponible avant le 02-02-19.
                            Le site de gestion est destiné à la gestion complète d'une association.  Cliquez sur le lien pour accéder au site de gestion. L'accès est limité aux membres de l'association. <br>
                            <a href="/gestion/connexion.php">Site de gestion</a>
                        </td>
                    </tr>
                </table>
            <br>
                <table style="text-align: center" border=1 width=90% height="50px" align="center" cellspacing=0 cellpadding=0>
                    <tr>
                        <td>
                            Si vous souhaitez modifier votre mot de passe, cliquez sur le lien ci-dessous...<br>
                            <a href="update-password.php">Changer son mot de passe.</a>
                        </td>
                    </tr>
                </table>
        </section>           
               
    </body>
</html>


Et enfin voici ma page pour la bdd:
<?php
    ob_start();
    session_start();
    $current_page = basename($_SERVER['PHP_SELF']);
    if($current_page !="accueil.php" && $current_page != "index.php" && !isset($_SESSION['user'])) {
        header('Location: index.php'); 
    }
?>

<style>
    html, body {
        margin: 0;
        padding: 0;
    }
    .bandeau {
        padding: 10px;
        width: 100%;
        color: white;
        text-align: center;
        margin-bottom: 20px;
        font-weight: bold;
        font-family: "Comic Sans MS", cursive, sans-serif;
    }
    .bandeau-error{
        background-color: #d92626;
    }
    
    .bandeau-success{
        background-color: #33A13B;
    }
</style>
<?php
$host_name = 'db771354560.hosting-data.io';
$database = 'db771354560';
$user_name = 'dbo771354560';
$password = 'MON MDP';

$dbh = null;
try {
  $dbh = new PDO("mysql:host=$host_name; dbname=$database;", $user_name, $password);
  $dbh->exec('SET NAMES utf8');
} catch (PDOException $e) {
  echo "Erreur!: " . $e->getMessage() . "<br/>";
  die();
}

  
function add_connexion($dbh, $nom, $prenom, $email, $username, $password){
        try {
            $stmt = $dbh->prepare("INSERT INTO connexion (nom, prenom, email, username, password, role) VALUES(:nom, :prenom, :email, :username, :password, 1)");
            $stmt->bindParam(':nom', $nom);
            $stmt->bindParam(':prenom', $prenom); 
            $stmt->bindParam(':email', $email);
            $stmt->bindParam(':username', $username);
            $stmt->bindParam(':password', $password);
            $stmt->execute();
            return false;
        } catch(Exception $e) {
            return false;
        }
    }

function test_connexion($dbh, $username, $password) {
        $stmt = $dbh->prepare("SELECT * FROM connexion WHERE username=:username AND password=:password");
        $stmt->bindParam(':username', $username);
        $stmt->bindParam(':password', $password);
        $stmt->execute();
        $row = $stmt->fetchAll(); // return false
        return $row;
    }


function update_infos($dbh, $nom, $prenom, $email, $username, $password){
        try {
            $stmt = $dbh->prepare("UPDATE connexion SET nom=:nom, prenom=:prenom, email=:email, username=:username, password=:password WHERE id=:id");
            $stmt->bindParam(':nom', $nom);
            $stmt->bindParam(':prenom', $prenom); 
            $stmt->bindParam(':email', $email);
            $stmt->bindParam(':username', $username);
            $stmt->bindParam(':password', $password);
            $stmt->execute();
            return true;
        } catch(Exception $e) {
            return false;
        }
    }

?>


Comme a mon habitude mes erreurs sont surement débiles mais je ne les vois pas... Je demande donc un petit coup de pouce :)

Merci d'avance pour votre aide.

EDIT : Correction des balises de code (jordane)

Configuration: Windows / Firefox 64.0

1 réponse

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
30 janv. 2019 à 11:39
Bonjour,

Sur les pages à sécuriser.. il te suffit de vérifier si ta variable de session est remplie
Dans le cas contraire.. tu rediriges vers ta page de connexion.

NB:A l'avenir, pour poster du code sur le forum, merci de le faire en utilisant LES BALISES DE CODE (et en y précisant le langage afin d'avoir la coloration syntaxique)
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
.
0
Gui4671 Messages postés 33 Date d'inscription jeudi 24 janvier 2019 Statut Membre Dernière intervention 7 avril 2019
30 janv. 2019 à 12:59
Mon problème c'est que ma page d'accueil ne voit pas quand je suis connecté...
Si je me connecte, je suis redirigé vers ma page d'accueil mais je n'ai pas accès à la variable session.
Si je met des mauvais identifiants, ça me mets bien le message d'erreur.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié le 30 janv. 2019 à 14:37
Déjà... dans le code pour ta BDD (le fichier connexion.php) ... il ne devrait y avoir aucun code html/css
Donc remplacer le bloc
<?php
    ob_start(); // ne sert à rien
    session_start();
    $current_page = basename($_SERVER['PHP_SELF']);
    if($current_page !="accueil.php" && $current_page != "index.php" && !isset($_SESSION['user'])) {
        header('Location: index.php'); 
    }
?>

<style>
    html, body {
        margin: 0;
        padding: 0;
    }
    .bandeau {
        padding: 10px;
        width: 100%;
        color: white;
        text-align: center;
        margin-bottom: 20px;
        font-weight: bold;
        font-family: "Comic Sans MS", cursive, sans-serif;
    }
    .bandeau-error{
        background-color: #d92626;
    }
    
    .bandeau-success{
        background-color: #33A13B;
    }
</style>

par uniquement
<?php
//affichage des erreurs php
error_reporting(E_ALL & ~E_NOTICE);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);


//démarrage des session si pas déjà démarées
if (session_status() == PHP_SESSION_NONE) {
  session_start();
}

$current_page = basename($_SERVER['PHP_SELF']);
$user = !empty($_SESSION['user']) ? $_SESSION['user'] : NULL;
if($current_page !="accueil.php" && $current_page != "index.php" && !$user) {
        header('Location: index.php'); 
        exit(); // toujours mettre un exit après une redirection
 }else{
  //le temps des tests si ça ne fonctionne toujours pas
  echo "<br> current_page : " . $current_page; 
  echo "<br> SESSION : <br>";
  print_r($_SESSION);
}
?>


0
Gui4671 Messages postés 33 Date d'inscription jeudi 24 janvier 2019 Statut Membre Dernière intervention 7 avril 2019
30 janv. 2019 à 17:22
J'ai changé mais cela n'a rien arrangé... Cela a même empiré la situation! Je ne sais même plus me connecter.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > Gui4671 Messages postés 33 Date d'inscription jeudi 24 janvier 2019 Statut Membre Dernière intervention 7 avril 2019
30 janv. 2019 à 17:32
Tu as des choses qui s'affichent ?
Peux tu nous montrer ton code modifié (attention à bien utiliser les balises de code cette fois )
0