Beste mensen.

Ik heb een vraagje ik heb een inlog systeem gemaakt. Maar ben er achter gekomen dat ik met een veiligheidslek zit. Als je bovenaan in de url balk de pagina naam invoegt dan kom je alsnog op de pagina kan me iemand wat uitleg over geven AUB.

alvast bedankt
Een gokje: Blijkbaar mist er een (stukje) controle of misschien wel wat sessie-code. Verder is het lastig te zeggen zonder relevante code.
Ik denk ergens wel dat het een stukje code is de session is. Maar moet eerlijk zeggen ik ken bijna niets van PHP en het is mijn eerste projectje hierin. en ja alles uitzoeken natuurlijk. dus excuseer me voor fouten die erin staan maar wil altijd bij leren hoor.

de login pagina:

<?php

    session_start();

    if( isset($_SESSION['user_id'])){
        header("Location: user.php");
    }

    require 'database.php';

    if(!empty($_POST['email']) && !empty($_POST['password'])):
      
        $records = $conn->prepare('SELECT id,email,password FROM users WHERE email = :email');
        $records->bindParam(':email', $_POST['email']);
        $records->execute();
        $results = $records->fetch(PDO::FETCH_ASSOC);

        $message='';

        if(count($results) > 0 && password_verify($_POST['password'], $results['password'])){
          $_SESSION['user_id'] = $results['id'];
          header("Location: user.php");
        } else {
            $message = 'Sorry your input is incorrect';
        }

    endif;
?>

<!DOCTYPE html>
<html>
<head>
    <title>Login page</title>
    <link rel="stylesheet" type="text/css" media="screen" href="assets/css/style.css" />
</head>
<body>
    <div class="header">
        <a href="index.php">app name</a>
    </div>
    <?php if(!empty($message)): ?>
    <p><?= $message ?></p>
    <?php endif; ?>

    <h1>Login</h1>
    <span>or <a href="register.php">register here</a></span>

    <form action="login.php" method="POST">
        <input type="text" placeholder="Enter your email" name="email">
        <input type="password" placeholder="and password" name="password">

        <input type="submit">
    </form>
</body>
</html>


en dan de user page:

<?php

session_start();

?>

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>ingelogd</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
    <div class="header">
        <a href="index.php">app name</a> | <a href="logout.php"> Logout?</a>
        <div id="datum">
        <?php $datum = date("j F Y");
        echo "Vandaag is het $datum";
        ?></div>
    </div>

    <div class="box">
       
    </box>
</body>
</html>

Je opent alleen de sessie-functies. Maar je controleert niks op $_SESSION['user_id'].

PS: Gebruik code tags in je bericht, om je code beter leesbaar te maken. Zie ook de Veelgestelde Vragen.
Ook op pagina die na inlog verschijnt moet je ook eerst weer controleren of je gebruiker ingelogd is. Zo nee, dan naar de inlogpagina verwijzen. Dat zul je voor elke pagina moeten doen die op jouw site staat. Want anders heb je een schijnbeveiliging. Met de juiste url kan iemand elke pagina bekijken dat wil je niet. Een voorbeeld om te checken of de gebruiker ingelogd is:

<?php 
require('includes/config.php');
if(!$user->is_logged_in()){ header('Location: login.php'); }

oke alvast bedankt voor de duidelijke antwoorden.
dit is alvast opgelost.

<?php

session_start();
if (!isset($_SESSION['user_id'])){
    header("location: login.php");
    die();
}
require 'database.php'
?>

Weer iets bij geleerd :D
Bedankt voor de uitleg :D
@thomas van den heuvel bedankt ik ga er nog een beetje met experimenteren en jou uitleg proberen toe te passen ;).

Reageren