3
votes

Comment rendre la page accessible uniquement si l'utilisateur est connecté en utilisant PHP

Je travaille sur un site Web qui a un formulaire de connexion. L'utilisateur peut saisir les informations, et si elles sont erronées, le site envoie une alerte. Cependant, le problème est que vous pouvez facilement accéder à la page après vous être connecté en modifiant le nom dans la barre d'adresse.

Vous pouvez facilement accéder à la page sans vous connecter, c'est donc mauvais. Pouvez-vous nous aider?

validation.php:

<center><h1>Donate Here!</h1></center>

Donate.php

<?php

$name =$_POST['user'];
$pass =$_POST['password'];
//Test code
//echo $pass; 
//End Test Code

//Connection Code
session_start();
$con = mysqli_connect('localhost', 'root', '');
if ($con->connect_error) {
    die("Connection failed: " . $con->connect_error);
} 
mysqli_select_db($con, 'userregistration');
// Connection End

//Query Code

$s = "select * from usertable where name = '$name' and password = '$pass'";
//test
//echo $s;
$result = mysqli_query($con, $s);

$num = mysqli_num_rows($result);

if($num == 1){

    echo "Hello " . $name;

}
else{

   echo "<script>";
   echo "alert('Incorrect Username or Password');";
   echo "window.location.replace('login.html');";
   echo "</script>";

}

?>
<!--html code-->


2 commentaires

if (! isset ($ _ SESSION ['id'])) {exit ('Connectez-vous pour voir cette page!')} - Exemple de ce qui doit être fait, je suis sûr que vous pourriez reconstituer le reste.


Veuillez également sécuriser votre candidature. Ne stockez jamais les mots de passe non chiffrés dans votre base de données. Votre code est vulnérable aux injections SQL. Cela signifie qu'un hacker peut entrer dans votre base de données et voler les informations de votre base de données.


3 Réponses :


1
votes

Vous devez créer une session après une connexion réussie:

session_start();

if (!isset($_SESSION['username']) || empty($_SESSION['username'])) {
    // no session, redirect user to index.php
    header('location: index.php');
}

Maintenant, dans votre Donate.php, vérifiez si l'utilisateur est connecté en vérifiant si la session est définie:

session_start();

if ($num == 1) {
    $_SESSION['username'] = $name;
}


4 commentaires

Ne devrait-il pas être isset au lieu de isSet ?


Je l'ai utilisé dans les deux sens. Je n'ai jamais eu de problèmes. S'il y a une raison pour laquelle vous ne devriez pas l'utiliser comme ça, je serais heureux de savoir;)


PHP est insensible à la casse pour les noms de fonctions.


Il ne fait aucun doute qu'il est insensible à la casse, mais vous devriez prendre l'habitude d'utiliser les fonctions telles qu'elles sont définies.



0
votes

Si vous souhaitez restreindre Donate.php, essayez ceci

    <?php
    session_start();

    if (empty($_SESSION['user_id'])) {
        header('Location:login.php');
    } ?>

<center><h1>Donate Here!</h1></center>


1 commentaires

bonjour, j'ai essayé cela a fonctionné. Cependant, si je saisis les bonnes informations dans le formulaire de connexion, cela me redirige toujours vers login.html. Peu importe ce que je fais, cela me redirige toujours. Comment réparer?



1
votes

Vous devez définir une sorte de marqueur dans votre session pour marquer le fait que votre utilisateur est authentifié (connecté). Vous pouvez stocker l'ID utilisateur de l'utilisateur actuel dans $ _SESSION ['current_user_id'] .

Veuillez également noter que votre requête est une bonne cible pour l'injection SQL, alors n'oubliez pas d'échapper SQL à toutes les données que vous ajoutez à la requête SQL via mysqli_real_escape_string

validation.php:

unset($_SESSION['current_user_id']);

Sur toutes vos pages, au tout début mettez le code :

some_page.php:

if (!isset($_SESSION['current_user_id'])) { exit('Your session expiried!') }
//... do some stuff

Pour déconnecter votre utilisateur, vous pouvez simplement désactiver $ _SESSION ['current_user_id']

logout.php:

//...
$s = "select * from usertable where name = '"
     .mysqli_real_escape_string($con, $name).
     "' and password = '"
     .mysqli_real_escape_string($con, $pass)
     ."'";

$result = mysqli_query($con, $s);

if ($row = mysqli_fetch_row($result))
{
  // row fecthed, user found
  $user_id = $row['user_id']; // Let expect that usertable has user_id column
  $_SESSION['current_user_id'] = $user_id;
}
else
{
   echo "<script>";
   echo "alert('Incorrect Username or Password');";
   echo "window.location.replace('login.html');";
   echo "</script>";
   exit();
}
//...


0 commentaires