Beveiligingslek op inlog systeem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nicky de maeyer

nicky de maeyer

19/07/2018 07:24:44
Quote Anchor link
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
 
PHP hulp

PHP hulp

22/12/2024 23:00:23
 
- Ariën  -
Beheerder

- Ariën -

19/07/2018 07:55:37
Quote Anchor link
Een gokje: Blijkbaar mist er een (stukje) controle of misschien wel wat sessie-code. Verder is het lastig te zeggen zonder relevante code.
Gewijzigd op 19/07/2018 08:43:07 door - Ariën -
 
Nicky de maeyer

nicky de maeyer

19/07/2018 09:26:06
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
46
47
48
49
50
51
52
53
54
<?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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>
Gewijzigd op 19/07/2018 11:33:33 door nicky de maeyer
 
- Ariën  -
Beheerder

- Ariën -

19/07/2018 09:41:27
Quote Anchor link
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.
Gewijzigd op 19/07/2018 09:43:22 door - Ariën -
 
Jan te Pas

Jan te Pas

19/07/2018 09:45:53
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
require('includes/config.php');
if(!$user->is_logged_in()){ header('Location: login.php'); }
[
/code]
 
Nicky de maeyer

nicky de maeyer

19/07/2018 11:46:58
Quote Anchor link
oke alvast bedankt voor de duidelijke antwoorden.
dit is alvast opgelost.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

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

require 'database.php'
?>

Weer iets bij geleerd :D
 
Thomas van den Heuvel

Thomas van den Heuvel

19/07/2018 11:59:18
Quote Anchor link
En zoals altijd: header('Location: ...') transporteert je niet direct automagisch naar de nieuwe locatie (interne link).

Zorg dat je de inhoud van de hierboven gelinkte reactie doorgrondt en ik raad je aan om voor redirects een functie te gebruiken zoals in die reactie staat beschreven.
 
Nicky de maeyer

nicky de maeyer

21/07/2018 19:15:55
Quote Anchor link
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 ;).
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.