[PHP] Zelfgemaakt inlogscript sputtert opeens tegen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi,

Een dik jaar geleden alweer, bokste ik een inlogscript met verschillende gebruikers niveaus in elkaar. Ik heb het origineel nooit gebackuped (stom van me), en wist er nu via een vriend (die het hier en daar wat had aangepast) terug te krijgen. Die aanpassingen zorgen ervoor dat het geheel niet meer werkt.

In de database beveiliging heb ik een tabel met velden gebruiker, wachtwoord en rechten. Het wachtwoord wordt md5-geëncrypteerd, de rechten kunnen 'administrator', 'beheerder' en 'gebruiker' zijn.

Als ik een pagina wil beveiligen, include ik dit (inc/inc_beveilig.php) bestandje bovenaan:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
    function beveilig($vereiste_rechten_voor_pagina){
        $_SESSION['pagina'] = $_GET['pagina'];
        require_once("inc/inc_rechten.php");
        $vereiste_rechten = $rechten[$vereiste_rechten_voor_pagina];
        if(!isset($_SESSION['rechten']) || $_SESSION['rechten'] > $vereiste_rechten){
            header("location: index.php?pagina=login");
        }
    }
?>


Praktijkvoorbeeld: het bestand 'schrijf_iets_naar_db.php' wil ik beveiligen; ik doe dan:
PHP:
1
2
3
<?php
    beveilig("administrator");
?>


Zoals je ziet, wil het het script me - als ik niet ben ingelogd - naar index.php?pagina=login sturen. Dat werkt nog.

Het bestand 'login.php' - wat je voorgeschoteld krijgt als je index.php?pagina=login aanroept - ziet er zo uit:
PHP:
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
<?php
    mysql_select_db("beveiliging");
    function verifieer($gebruiker, $wachtwoord){
        $wachtwoord = md5($wachtwoord);
        $query_verifieer = "SELECT * FROM gebruiker WHERE gebruiker = \"$gebruiker\" AND wachtwoord = \"$wachtwoord\";";
        echo($query_verifieer);
        $resultaat_verifieer = mysql_query($query_verifieer) or die(mysql_error());  
        if(mysql_num_rows($resultaat_verifieer) == 1){
            return true;
        }
    }
    function login($gebruiker){
        $query_login = "SELECT rechten FROM gebruiker WHERE gebruiker = \"$gebruiker\";";
        echo($query_login);
        $resultaat_login = mysql_query($query_login) or die(mysql_error());
        $rij_login = mysql_fetch_array($resultaat_login);
        include("inc/inc_rechten.php");
        $_SESSION['rechten'] = $rechten[$rij_login['rechten']];
        header("location: index.php?pagina=" . $_SESSION['pagina']);
    }
?>
<?php
    if(!isset($_POST['login'])){
?>
<form name="form_login" method="post" action="index.php?pagina=login">
    gebruiker: <input type="text" name="gebruiker" />
    <br />
    wachtwoord: <input type="password" name="wachtwoord" />
    <br />
    <input type="submit" name="login" value="login">
</form>
<?php
    }
    else{
        if(verifieer($_POST['gebruiker'], $_POST['wachtwoord'])){
            login($_POST['gebruiker']);
        }
        else{
            echo("<p>Inloggen mislukt.</p>");
            //echo("<p>" . $_POST['wachtwoord'] . "</p>");
        }
    }
?>


Omdat een administrator ook alles wat een 'gewone' beheerder en gebruiker mag, werk ik met cijfertjes. Die zitten in het bestand inc/inc_rechten.php.
PHP:
1
2
3
4
5
<?php
    $rechten["administrator"] = 1;
    $rechten["beheerder"] = 2;
    $rechten["gebruiker"] = 3;
?>


Ik krijg het loginformulier goed gepresenteerd, en kan ook daadwerkelijk inloggen. Het enige dat niet lijkt te werken, is het eigenlijke inloggen zelf. Om de een of andere reden steekt hij het nummertje van de rechten (dus 1 voor administrator, bijvoorbeeld) niet in een sessievariabele. Bovenaan index.php staat dit.
PHP:
1
2
3
4
5
<?php
    ob_start();
    include("inc/inc_verbinding.php"); // MySQL-verbinding
    include("inc/inc_beveilig.php");
    echo($_SESSION['rechten']);


(Warnings staan af, dus hij gaat niet melken als die sessievariabele niet bestaat. Maar zelfs als ik 'succesvol' ben ingelogd, print hij niets.)

Wat zie ik hier over het hoofd?

[ Voor 1% gewijzigd door Verwijderd op 06-08-2006 17:45 . Reden: paar regels bij index.php bijgeplakt ]


Acties:
  • 0 Henk 'm!

  • Psychokiller
  • Registratie: Oktober 2001
  • Niet online
Je hebt bovenaan de pagina ob_start() staan, vergis je je daar niet met session_start(), wat op de allereerste regel moet komen voor enige output ?