onbeperkte inlog via php aanmaken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Piet Marisael

Piet Marisael

24/07/2010 13:08:12
Quote Anchor link
Met behulp van een php-code heb ik een inlog-pagina op mijn site gemaakt.
Het btreft de inlog-code met de naam beveiliging1.inc
Waar ik het destijds vandaan gehaald heb weet ik niet meer zo precies.
Het maakt gebruik van een zogenaamde datebase die controleert op de ingegeven namen en wachtwoorden.
Nu zou ik graag die beveiliging een stukje meer willen uitbreiden door één bepaalde gebruiker (ikzelf dus) een onbeperkte toegang te verlenen.

De controlerende code ziet er als volgt uit:
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
// Gebruikersnaam en wachtwoord controleren:
if (isset($_REQUEST['gn'])) {
    // Gebruikersnaam lezen uit een formulier of cookie:
    if (isset($_POST['gn'])) {
        $gebruikersnaam = $_POST['gn'];
    } elseif (isset($_COOKIE['gn'])) {
        $gebruikersnaam = $_COOKIE['gn'];
    } else {
        inloggen();
    }
    $gebruikersnaam = trim(strip_tags($gebruikersnaam));
    // Controleren of de gebruikersnaam bestaat:
    if (array_key_exists($gebruikersnaam, $gebruikers)) {
        // Wachtwoord lezen uit een formulier of cookie:
        if (isset($_POST['ww'])) {
            $wachtwoord = $_POST['ww'];
        } elseif (isset($_COOKIE['ww'])) {
            $wachtwoord = $_COOKIE['ww'];
        } else {
            inloggen($gebruikersnaam);
        }
        $wachtwoord = trim(strip_tags($wachtwoord));
        // Het wachtwoord bij deze gebruikersnaam controleren:
        if ($gebruikers[$gebruikersnaam] == $wachtwoord) {
            // Cookie verloopt na 30 dagen = 2592000 seconden of 1 dag = 86400 seconden:
            $verloopt_op = time() + 86400;
            // Gebruikersnaam opslaan in een cookie:
            setcookie("gn", $gebruikersnaam, $verloopt_op);
            // Wachtwoord naar keuze opslaan in een cookie:
            if (isset($_POST['wo'])) {
                if ($_POST['wo'] == 1) {
                    setcookie("ww", $wachtwoord, $verloopt_op);
                }
            }
        } else {
            inloggen($gebruikersnaam);
        }
    } else {
        inloggen($gebruikersnaam);
    }
} else {
    inloggen();
}

Wat en waar zou ik moeten aanvullen om bijv. : "naamikzelf" => "wachtwoordx", // ikzelf
onbeperkte toegang te verlenen?
Het is natuurlijk wel de bedoeling dat de rest van de gebruikers gewoon op 1 dag inloggen blijven staan en niet onbeperkt mee kunnen liften.
Wie kan mij hiermee helpen?
Gewijzigd op 24/07/2010 13:09:59 door Piet Marisael
 
PHP hulp

PHP hulp

23/11/2024 16:45:51
 
- SanThe -

- SanThe -

24/07/2010 13:17:44
Quote Anchor link
Wachtwoord in een Cookie is zeer onveilig.
Als beveiliging1.inc een bestand is dan is dat door iedereen gewoon te lezen.
 
Joren de Wit

Joren de Wit

24/07/2010 13:18:54
Quote Anchor link
Als jij inlogt zul je $verloopt_op een andere waarde moeten geven, op regel 26 zul je dus een if-statement moeten inbouwen waar je op gebruikersnaam controleert.

Maar of je dit script wilt blijven gebruiken is een tweede, er zitten namelijk een paar grote haken en ogen aan! Om te beginnen sla je wachtwoorden NOOIT op in een cookie, en al helemaal niet ongecodeerd. Iedere gebruiker van de betreffende computer kan nu het ingevulde wachtwoord uitlezen!

Wachtwoorden worden verder zo te zien ongecodeerd ergens opgeslagen. Dit is niet wenselijk, gebruik bijvoorbeeld de sha1 hash van een wachtwoord en vergelijk die twee waarden met elkaar. Dan is het oorspronkelijke wachtwoord in ieder geval niet te achterhalen.

Ook is het gebruik van $_REQUEST niet aan te raden. Je weet nooit waar de betreffende waarde vandaan komt. Nu voer je later nog wel een controle uit, maar waarom gebruik je die niet in eerste instantie?

Kortom, wellicht dat het verstandiger is om een ander loginscript te zoeken of een nieuw script te schrijven...
 
Noppes Homeland

Noppes Homeland

24/07/2010 13:19:40
Quote Anchor link
fout 1: het gebruik van $_REQUEST
fout 2: het opslaan van een wachtwoord in een sessie/cookie
fout 3: je maakt overbodige variabelen aan

en post je code ook tussen de php-tags...

Oplossing: je kan in feite groepsrechten kunnen maken en daarop kunnen controleren
 
Piet Marisael

Piet Marisael

24/07/2010 13:34:59
Quote Anchor link
Ik weet dat het geen perfecte waterdichte manier is van beveiligen.
Weet je eenmaal de URL van de achterliggende pagina's dan kom je er ook zonder inlog op.
Echter ontbreekt het mij van de nodige kennis om het 'perfect' te maken.
Ben dan ook maar een beginner die probeert om door de codes te zien te begrijpen wat er gebeurd.
De achterliggende pagina's zijn ook niet zo belangrijk dat het een perfecte afscherming nodig heeft.

Maar als ik het goed begrijp moet ik dus de code als volgt uitbreiden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
if ($gebruikers[$gebruikersnaam] == $wachtwoord) {
            // Cookie verloopt na 30 dagen = 2592000 seconden of 1 dag = 86400 seconden:
            $verloopt_op = time() + 86400;
 if ($gebruikers[naamikzelf] == $wachtwoord) {
            // Cookie verloopt na 30 dagen = 2592000 seconden of 1 dag = 86400 seconden:
            $verloopt_op = time() + 2592000;

om mezelf alvast 30 dagen toegang te geven terwijl de rest op 1 dag blijft staan?
Of zitten hier ook nog een paar foutjes in waardoor het niet gaat werken, te denken valt aan nodige ' of "
let er wel op dat ik nu alleen maar bepaalde stukjes van de complete code plaats die normaal gesproken altijd tussen php-tags staat en aangeroepen wordt door het commando
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// Meer hebt u niet nodig om een webpagina te beveiligen:
require_once('beveiliging1.inc.php');
?>
Gewijzigd op 24/07/2010 13:39:39 door Piet Marisael
 
- SanThe -

- SanThe -

24/07/2010 13:44:20
Quote Anchor link
Op jouw manier krijgt iemand een cookie van 30 dagen als ie een foute naam en jouw (prive) goede password ingeeft.
Zo niet:
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
<?php
$verloopt_op
= time() - 1000;
if($gebruikersnaam == 'naam_van_de_beheerder')
{

    if ($gebruikers['naam_van_de_beheerder'] == $wachtwoord)
    {

        // Cookie verloopt na 30 dagen = 2592000 seconden
        $verloopt_op = time() + 2592000;
    }
}

else
{
    if ($gebruikers[$gebruikersnaam] == $wachtwoord)
    {

        // Cookie verloopt na 1 dag = 86400 seconden:
        $verloopt_op = time() + 86400;
    }
}

?>
Gewijzigd op 24/07/2010 13:47:39 door - SanThe -
 
Piet Marisael

Piet Marisael

24/07/2010 13:49:00
Quote Anchor link
Bedankt voor het voorbeeld SanThe NvT, die else hoort er natuurlijk ook bij, was hem even vergeten.
Met een beetje door rekenen weet ik ook dat ik mezelf nu voor een jaar rechtstreekse toegang kan geven.
Ik ga het gelijk uit proberen.

ik zie dat er ook een regel bij gekomen is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$verloopt_op
= time() - 1000;
?>


Vanwaar deze regel?
Om uit te kunnen loggen heb ik de complete code nogmaal in een pagina gebouwd die daar de tijd in het negatief zet om daadwerkelijk uitgelogd te zijn.
Wellicht omslachtig, maar in mijn beginners-ogen werkt het.
Gewijzigd op 24/07/2010 13:54:12 door Piet Marisael
 
Joren de Wit

Joren de Wit

24/07/2010 13:56:11
Quote Anchor link
SanThe heeft die regel erbij gezet om te zorgen dat de cookie direct verlopen is als er geen juist wachtwoord ingevoerd wordt...

Kijk verder eens naar deze tutorial. Het geeft een hele eenvoudige manier van het opzetten van een goed werkend loginscript. Hoef je je ook geen zorgen te maken dat achterliggende pagina's met een directe url wel bekeken kunnen worden. Dat wil je namelijk echt niet :-)
 
- SanThe -

- SanThe -

24/07/2010 13:58:15
Quote Anchor link
Hetzelfde maar dan korter:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$verloopt_op
= time() - 1000;
if ($gebruikers[$gebruikersnaam] == $wachtwoord)
{

    // Cookie verloopt na 1 dag = 86400 seconden:
    $verloopt_op = time() + 86400;
    if($gebruikersnaam == 'naam_van_de_beheerder')
    {

        // Cookie verloopt na 30 dagen = 2592000 seconden
        $verloopt_op = time() + 2592000;
    }
}

?>
 
Piet Marisael

Piet Marisael

24/07/2010 14:03:27
Quote Anchor link
@Blanche PHP: bedankt voor de suggestie, ik zal er zeker me eens wat verder in gaan verdiepen en er meer van leren.

@SanThe Nvt: hier hoort 'else' dan weer niet tussen?
 
- SanThe -

- SanThe -

24/07/2010 14:11:00
Quote Anchor link
Piet Marisael op 24/07/2010 14:03:27:
@SanThe Nvt: hier hoort 'else' dan weer niet tussen?

Nee, je kijkt eerst of de naam en wachtwoord kloppen. Als die kloppen dan kijk je of de naam die van de beheerder is. Dus er is op deze manier geen 'else' nodig.
 
Piet Marisael

Piet Marisael

24/07/2010 14:34:22
Quote Anchor link
Okee dat is duidelijk nu.

@ Blance PHP:
ik heb alvast even zitten kijken in die tutorial, heb de voorbeeldjes alvast als file opgeslagen.
Maar ik weet nu al dat ik het een en ander nog niet begrijp.
Dat is weer latere zorg waar ik me in kan gaan verdiepen als ik wat meer tijd heb.
Zo mis ik o.a. een voorbeeldje van db_config.php

Dat ik met je voorbeeld elke pagina kan beveiligen interesseert me wel.
 
Piet Marisael

Piet Marisael

24/07/2010 14:54:20
Quote Anchor link
ik heb het voorbeeld van SanThe Nvt ingebouwd, krijg nu wel een foutmelding:

PHP Parse error: syntax error, unexpected '}' in D:\www\naamwebsite\www\lid\beveiliging1.inc.php on line 190

Dat is de regel direct na het laatste commando inloggen, in dit voorbeeld helemaal onderaan:
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?
// Associatieve array met gebruikers (gebruikersnaam => wachtwoord):
$gebruikers = array(
                    "webmastervoorbeeld" => "wachtwoordvoorbeeld",  // webmaster
                    "anderegebruiker" => "wachtwoordvoorbeeld",  // anderegebruiker
                    
                    
                    
                   // enzovoorts ...

                   );

// Gebruikersnaam en wachtwoord controleren:
if (isset($_REQUEST['gn'])) {
    // Gebruikersnaam lezen uit een formulier of cookie:
    if (isset($_POST['gn'])) {
        $gebruikersnaam = $_POST['gn'];
    }
elseif (isset($_COOKIE['gn'])) {
        $gebruikersnaam = $_COOKIE['gn'];
    }
else {
        inloggen();
    }

    $gebruikersnaam = trim(strip_tags($gebruikersnaam));
    // Controleren of de gebruikersnaam bestaat:
    if (array_key_exists($gebruikersnaam, $gebruikers)) {
        // Wachtwoord lezen uit een formulier of cookie:
        if (isset($_POST['ww'])) {
            $wachtwoord = $_POST['ww'];
        }
elseif (isset($_COOKIE['ww'])) {
            $wachtwoord = $_COOKIE['ww'];
        }
else {
            inloggen($gebruikersnaam);
        }

        $wachtwoord = trim(strip_tags($wachtwoord));
        // Het wachtwoord bij deze gebruikersnaam controleren:


// nieuwe controle met langere inlog voor webmaster


$verloopt_op = time() - 1000;
if($gebruikersnaam == 'webmastervoorbeeld')
{

    if ($gebruikers['webmastervoorbeeld'] == $wachtwoord)
    {

        // Cookie verloopt na 30 dagen = 2592000 seconden
        $verloopt_op = time() + 2592000;
    }
}

else
{
    if ($gebruikers[$gebruikersnaam] == $wachtwoord)
    {

        // Cookie verloopt na 1 dag = 86400 seconden:
        $verloopt_op = time() + 86400;
    }
}




            // Gebruikersnaam opslaan in een cookie:
            setcookie("gn", $gebruikersnaam, $verloopt_op);
            // Wachtwoord naar keuze opslaan in een cookie:
            if (isset($_POST['wo'])) {
                if ($_POST['wo'] == 1) {
                    setcookie("ww", $wachtwoord, $verloopt_op);
                }
            }
        }
else {
            inloggen($gebruikersnaam);
        }
    }
else {
        inloggen($gebruikersnaam);
    }
}
else {
    inloggen();
}


// Webpagina met een formulier en instructies weergeven:
function inloggen($gebruikersnaam = '')
{

?>
Gewijzigd op 24/07/2010 15:37:41 door Piet Marisael
 
- SanThe -

- SanThe -

24/07/2010 15:46:31
Quote Anchor link
Regel 70, 71 en 72 moeten weg.

Niet bumpen.
Gewijzigd op 24/07/2010 15:47:33 door - SanThe -
 
Piet Marisael

Piet Marisael

24/07/2010 18:11:43
Quote Anchor link
ik heb echter nooit begrepen waarom er die 3 regels extra in stonden, echter zonder foutmelding had ik het idee dat het zo wel zou horen.
Bovenstaand beveiligingsscript wordt op de leden ingang aangeroepen met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
// Meer hebt u niet nodig om een webpagina te beveiligen:
require_once('beveiliging1.inc.php');
?>


Vraag: is het niet zo dat op elke volgende pagina in het leden-gedeelte deze script aangeroepen mag worden om zodoende elke pagina te beveiligen?
Ik heb het echter nooit geprobeerd.
Maar zou het, nu ik er zo over nadenk, wellicht mogelijk zijn om een controle te laten uitvoeren op elke pagina of men wel ingelogd is.
Of zie ik dat verkeerd?
Gewijzigd op 24/07/2010 18:53:31 door Piet Marisael
 



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.