Beste lezer,
Ik wil jullie uitdagen
Ik wil jullie uitdagen een fout te vinden in mijn code waardoor je eigenlijk in kunt loggen zonder de inloggegevens te weten. Want ik wil weten of de beveiliging wel goed is voordat dit het internet opgaat.
Oke, klein stukje uitleg. Ik heb een MySQL database, daarin staat de tabel "admin" en daarin de record/veld "verify". Als mensen in het formulier aangeven een cookie te willen. Wordt er een cookie gemaakt waarin de datum word verpakt in MD5, en deze wordt ook weggeschreven naar de database.
Ik heb dus telkens als iemand inlogt een andere code van 32 karakters, die zowel in de cookie als in de database staan, als deze worden vergeleken en ze zijn gelijk, krijgt iemand adminstatus, dat doe ik met behulp van $_SESSION, die op 1 wordt gezet.
Let op
Ik wil jullie uitdagen
Oke, klein stukje uitleg. Ik heb een MySQL database, daarin staat de tabel "admin" en daarin de record/veld "verify". Als mensen in het formulier aangeven een cookie te willen. Wordt er een cookie gemaakt waarin de datum word verpakt in MD5, en deze wordt ook weggeschreven naar de database.
Ik heb dus telkens als iemand inlogt een andere code van 32 karakters, die zowel in de cookie als in de database staan, als deze worden vergeleken en ze zijn gelijk, krijgt iemand adminstatus, dat doe ik met behulp van $_SESSION, die op 1 wordt gezet.
Let op
- Het is dus de bedoeling (en geen fout) dat er maar 1 gebruiker kan inloggen, hij is dus niet multiuser opgezet met een gebruikersdatabase
- Het is ook de bedoeling dat die persoon achter dezelfde PC zit, wil hij gebruik maken van de cookie.
- Dit is een EDIT, dus denk niet dat ripexx domme dingen post
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
| <?php /* Uitleg: Als je de login goed hebt, of er is een geldige cookie (kom ik op terug in de code) word de $_SESSION op 1 gezet, dat staat gelijk aan adminstatus, oftewel...bij alle admin gerelateerde pagina's word eerst gekeken of de sessie 1 is. */ session_start(); //Als er al een sessie is (Je bent al ingelogd) stoppen we de check, en geven een //link naar de admin pagina. if($_SESSION['login'] == 1) { exit("<a href='$link_admin'>Admin panel</a>"); } //Deze variabele is nodig om "instellingen.php" te betreden. In deze pagina staan //wat algemene instellingen zoals de MySQL login, en links van root en admin //pagina. define("ADMIN_FILE", "TRUE"); include("instellingen.php"); //Als je nog geen adminstatus hebt, hebben we sowieso MySQL nodig mysql_connect("$mysql_loc","$mysql_user","$mysql_pass"); mysql_select_db("$mysql_db"); //Hier maak ik een nieuwe key, die vervolgens wordt opgeslagen in database //en cookie. function newkey() { //Nieuwe key aanmaken $new_key = md5(date("jdGis")); //Cookie update setcookie("session", $new_key, time()+999999, "/"); //Database update $update = "UPDATE admin SET verify = '".$new_key."'"; mysql_query($update) or die ("Login database fout - " . mysql_error()); } //Goed, de vorige check was negatief (Je was nog geen admin) else { //Checken of cookie gelijk is aan database key if(isset($_COOKIE['session'])) { $sql = "SELECT verify FROM admin"; $result = mysql_query($sql); //Sleutels maken $db_key = mysql_result($result, 0); $co_key = $_COOKIE['session']; //Sleutels vergelijken if($db_key == $co_key) { //Admin status $_SESSION['login'] = 1; //Nieuwe key maken newkey(); //Link naar admin panel geven, en dan exit exit("<a href='$link_admin'>Admin panel</a>"); } } //Sessie is 0, en er is geen cookie, of cookie is fout else { //Als er op de Submitknop is gedrukt doen we dit if(isset($_POST['Submit'])) { //haal alle troep uit de velden $user = trim(htmlentities($_POST['user'])); $pass = trim(htmlentities($_POST['pass'])); //Als ze leeg zijn if($user == "" || $pass == "") { exit("<center>Toegang geweigerd<br>De velden zijn leeg</center>"); } //Als ze onjuist zijn if($user != "admin" || $pass != "pass") { exit("<center>Toegang geweigerd<br>Onjuiste invoer</center>"); } //Oke, user en pass zijn goed else { //Admin status geven $_SESSION['login'] = 1; //Als herinneren is aangevinkt, cookie maken en //database updaten if($_POST['herinneren'] == TRUE) { newkey(); } exit("<a href='$link_admin'>Admin panel</a>"); } } //Geen sessie, geen cookie en er is nog niet op Submit gedrukt. //laat het HTML formulier zien. else { ?> <form name="login" method="post" action=""> <input name="user" type="text" id="user">Gebruiker <br> <input name="pass" type="password" id="pass">Wachtwoord <br> <input name="herinneren" type="checkbox" value="TRUE">Opslaan op deze PC?<br> <input type="submit" name="Submit" value="inloggen"> </form> <?php //Alle lussen weer afsluiten. } } } ?> |
[ Voor 49% gewijzigd door Verwijderd op 21-10-2006 20:12 ]