onbeperkte inlog via php aanmaken
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)
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
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();
}
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
Als beveiliging1.inc een bestand is dan is dat door iedereen gewoon te lezen.
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...
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
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)
1
2
3
4
5
6
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;
// 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)
1
2
3
4
2
3
4
<?php
// Meer hebt u niet nodig om een webpagina te beveiligen:
require_once('beveiliging1.inc.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
Zo niet:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
}
}
?>
$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 -
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:
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
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 :-)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
@SanThe Nvt: hier hoort 'else' dan weer niet tussen?
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.
@ 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.
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)
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
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 = '')
{
?>
// 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
Bovenstaand beveiligingsscript wordt op de leden ingang aangeroepen met:
Code (php)
1
2
3
4
2
3
4
<?php
// Meer hebt u niet nodig om een webpagina te beveiligen:
require_once('beveiliging1.inc.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