Pagina beveiligen zonder database

Uit Bizzieman / PHP Wiki
Ga naar: navigatie, zoeken
Toelichting
Met dit script kun je één over meerdere pagina's beveiligen met een login voor meerdere verschillende gebruikers. Je hebt hier geen database voor nodig. In het script kun je meerdere inlognamen met bijhorende passwords ingeven. ze staan in het array genaamd $secrets.
Wil je het script gebruiken dan kan je de code bovenin jouw .php pagina plakken. Bij gebruik op meerdere pagina's moet je het script op elke pagina plakken. Het script is eigenlijk niet echt gemaakt voor meerdere pagina's omdat het updaten van de gebruikers in het array dan op al die pagina's moet gebeuren. Dan is het gebruik van een database uiteraard een stuk simpeler.

Verder lijkt mij dat het commentaar in het script voldoende uitleg geeft.

Snippets

<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

// Om sessions te kunnen gebruiken
session_start();

// Het array met de loginnamen met bijbehorende passwords
$secrets = array("naam1" => "password1", "naam2" => "password2");

// De naam voor de sessie met de waarde voor de sessie
$sessionname = "Secure";
$sessiontekst = md5(date("d-m-Y"));

// Checken of er iets is gepost vanuit een formulier
if($_SERVER['REQUEST_METHOD'] == "POST")
{
    // Checken of het inloggen of uitloggen is
    $keuze = (isset($_POST['uitloggen'])) ? "uitloggen" : "inloggen";
    if($keuze == "inloggen")
    {
        // Keuze is inloggen
        $naam = (isset($_POST['naam'])) ? trim($_POST['naam']) : "";
        $paswoord = (isset($_POST['paswoord'])) ? trim($_POST['paswoord']) : "";
        // Naam en paswoord checken of het in het array staat
        $bool = false;
        foreach($secrets as $key => $value)
        {
            // De $bool wordt true zodra de naam en het paswoord gevonden zijn
            $bool = ($bool OR ($key == $naam AND $value == $paswoord));
        }
        if($bool)
        {
            // Gebuiker is gevonden dus session aanmaken en naam onthouden
            $_SESSION[$sessionname] = $sessiontekst;
            $_SESSION['naam'] = $naam;
        }
        else
        {
            // Gebruiker is niet gevonden
            exit("Foute inloggegevens");
        }
    }
    else
    {
        // Keuze is uitloggen dus session weggooien
        session_destroy();
        exit("Je bent nu uitgelogd");
    }
}

// Checken of de session (niet) bestaat of (niet) de juiste waarde heeft
if(!isset($_SESSION[$sessionname]) OR $_SESSION[$sessionname] != $sessiontekst)
{
    // Session is niet in orde dus een formulier
    echo '<form action="" method="POST">
    Inlognaam: <input type="text" name="naam"><br/>
    Password: <input type="password" name="paswoord"><br/>
    <input name="inloggen" type="submit" value="Login">
    </form>';
    exit();
}

// Alles is in orde dus hieronder komt de pagina met, eventueel, onderstaande uitlogknop
echo '<form action="" method="POST">
<input name="uitloggen" type="submit" value="Logout">
</form><br/>';

// Eventueel te gebruiken naam
echo 'Welkom ' . $_SESSION['naam'];

// Rest van de pagina
?> 

Op deze regel kun je uiteraard zelf een tekst invullen. $sessiontekst = md5(date("d-m-Y")); Maar het grappige van deze regel zoals die nu is, is dat je om 00:00 uur spontaan wordt uitgelogd.

Dit script is hoofdzakelijk bedoeld voor het gebruik van losse pagina's. Als jij een pagina maakt met alleen de inloggegevens van 'beheerder', dan kan dat. Wil jij echter meerdere pagina's gaan beheren, gebruik dan een database.

Er zitten geen bijzondere veligheidsdingen in. Echt veilig wordt het als je extra dingen inbouwt betreffende het checken van de bezoeker. Maar dan heb je een database nodig voor de opslag van die gegevens.

Snippets