Site review inlogsysteem
Ik heb geprobeerd met behulp van het inlogscript van iChris een mooi CMS te maken. Het is vooral belangrijk dat het 99,9% veilig is, en dat accounts dus niet kunnen worden gehackt.
Aangezien ik geen online werkend voorbeeld heb, post ik hieronder de 3 belangrijkste pagina's: Aanmelden.php, inloggen.php en beheer.php (de pagina die beveiligd is)
Aanmelden.php
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
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
<?php
/****
* Simpel inlog systeem V1
*
* Gemaakt door Chris "iChris.nl" Horeweg
* Lees de leesmij op www.iChris.nl/simpel-inlog-systeem/
****/
echo '<h2>Aanmelden</h2>';
// We gaan eerst kijken of het formulier al is ge"submit", zo ja, gaan we het eens goed bekijken
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Eerst gaan we kijken of de gebruiker wel alles heeft ingevuld. Vergeet niet, dat als je het formulier
// bewerkt of uitbreid, je dat veld hier ook nog in moet doen!
if(
empty($_POST['gebruikersnaam']) ||
empty($_POST['wachtwoord']) ||
empty($_POST['wachtwoord_herhalen']) ||
empty($_POST['email']) ||
empty($_POST['email_herhalen'])
){
echo '
Je moet natuurlijk wel alles invullen!
<form method="post" action="">
<table>
<tr>
<td width="150px">Gebruikersnaam:</td>
<td width="250px"><input type"text" name="gebruikersnaam" value="'.$_POST['gebruikersnaam'].'" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord:</td>
<td><input type="password" name="wachtwoord" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord herhalen:</td>
<td><input type="password" name="wachtwoord_herhalen" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres:</td>
<td><input type="text" name="email" value="'.$_POST['email'].'" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres herhalen:</td>
<td><input type="text" name="email_herhalen" value="'.$_POST['email_herhalen'].'" style="width:150px;" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="aanmelden" value="Aanmelden" style="width:150px;" /></td>
</tr>
</table>
</form>';
}
// De wachtwoorden moeten natuurlijk wel gelijk zijn...
else
if($_POST['wachtwoord'] != $_POST['wachtwoord_herhalen'])
{
echo '
De wachtwoorden zijn niet gelijk!
<form method="post" action="">
<table>
<tr>
<td width="150px">Gebruikersnaam:</td>
<td width="250px"><input type"text" name="gebruikersnaam" value="'.$_POST['gebruikersnaam'].'" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord:</td>
<td><input type="password" name="wachtwoord" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord herhalen:</td>
<td><input type="password" name="wachtwoord_herhalen" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres:</td>
<td><input type="text" name="email" value="'.$_POST['email'].'" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres herhalen:</td>
<td><input type="text" name="email_herhalen" value="'.$_POST['email_herhalen'].'" style="width:150px;" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="aanmelden" value="Aanmelden" style="width:150px;" /></td>
</tr>
</table>
</form>';
}
// Ook de e-mail adressen moeten gelijk zijn...
else
if($_POST['email'] != $_POST['email_herhalen'])
{
echo '
De e-mail adressen zijn niet gelijk!
<form method="post" action="">
<table>
<tr>
<td width="150px">Gebruikersnaam:</td>
<td width="250px"><input type"text" name="gebruikersnaam" value="'.$_POST['gebruikersnaam'].'" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord:</td>
<td><input type="password" name="wachtwoord" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord herhalen:</td>
<td><input type="password" name="wachtwoord_herhalen" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres:</td>
<td><input type="text" name="email" value="'.$_POST['email'].'" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres herhalen:</td>
<td><input type="text" name="email_herhalen" value="'.$_POST['email_herhalen'].'" style="width:150px;" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="aanmelden" value="Aanmelden" style="width:150px;" /></td>
</tr>
</table>
</form>';
}
// We gaan toch ook nog maar even kijken of de opgegeven gegevens niet al bestaan in de database!
else
if(mysql_num_rows(mysql_query("
SELECT
id
FROM
gebruikers
WHERE
gebruikersnaam = '".mysql_real_escape_string($_POST['gebruikersnaam'])."'
OR
email = '".mysql_real_escape_string($_POST['email'])."'
")))
{
echo '
De opgegeven gebruikersnaam of email adres is bij ons al bekend!
<form method="post" action="">
<table>
<tr>
<td width="150px">Gebruikersnaam:</td>
<td width="250px"><input type"text" name="gebruikersnaam" value="'.$_POST['gebruikersnaam'].'" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord:</td>
<td><input type="password" name="wachtwoord" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord herhalen:</td>
<td><input type="password" name="wachtwoord_herhalen" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres:</td>
<td><input type="text" name="email" value="'.$_POST['email'].'" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres herhalen:</td>
<td><input type="text" name="email_herhalen" value="'.$_POST['email_herhalen'].'" style="width:150px;" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="aanmelden" value="Aanmelden" style="width:150px;" /></td>
</tr>
</table>
</form>';
}
// Het lijkt erop dat alles klopt!
// Vergeet niet om hier je extra checks toe te voegen..
// Klopt het e-mail adres wel, een bepaalde lengte voor gebruikersnaam, email en wachtwoord...
// Dit zijn dingen die je zelf kunt toevoegen, zodat je hier ook nog van leert!
// Trouwens nog een korte tip, je kan op dezelfde manier als hierboven ook nog een extra
// check kunnen uitvoeren of de gebruiker al een account heeft op dit IP adres!
else
{
// Om het een beetje te beveiligen, halen we alles door "mysql_real_escape_string"
foreach($_POST as $naam => $waarde)
{
$_POST[$naam] = mysql_real_escape_string($waarde);
}
// Zo, nu gaan we alles in de database zetten.
// Let erop dat als jij extra velden heb neergezet in je form, je deze ook in je
// database moet hebben staan, en je ze ook hieronder erbij zet.
// Je zou als toevoeging nog een bevestigingsmail kunnen toevoegen. Wellicht
// dat als er vraag naar is, ik dit in een volgende versie erbij zet.
// Het is niet moeilijk om dit zelf toe te voegen, kijk daarvoor op de website
// die je helemaal van boven ziet!
$query = @mysql_query("
INSERT INTO
gebruikers (
gebruikersnaam,
wachtwoord,
email,
ip
)
VALUES (
'".$_POST['gebruikersnaam']."',
'".md5($_POST['wachtwoord'])."',
'".$_POST['email']."',
'".$_SERVER['REMOTE_ADDR']."'
)");
if(!$query)
{
// Er is iets verkeerds gegaan met de query, we moeten dat wel laten weten!
echo 'Aanmelden is niet voltooid! <br /><br />'.mysql_error();
exit;
}
else
{
// Alles is achter de rug, de gebruiker is nu geregistreerd.
// Vergeet niet dat als je een activatie link erin heb gebakken,
// je dit bericht moet aanpassen, en natuurlijk een email moet
// versturen! Anders kan de bezoeker zich nooit inloggen...
echo 'Aanmelden voltooid! U kunt nu inloggen.';
}
}
}
// Als het nog niet is gesubmit, laten we een form zien!
else
{
echo '
<form method="post" action="">
<table>
<tr>
<td width="150px">Gebruikersnaam:</td>
<td width="250px"><input type"text" name="gebruikersnaam" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord:</td>
<td><input type="password" name="wachtwoord" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord herhalen:</td>
<td><input type="password" name="wachtwoord_herhalen" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres:</td>
<td><input type="text" name="email" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres herhalen:</td>
<td><input type="text" name="email_herhalen" value="" style="width:150px;" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="aanmelden" value="Aanmelden" style="width:150px;" /></td>
</tr>
</table>
</form>';
}
?>
/****
* Simpel inlog systeem V1
*
* Gemaakt door Chris "iChris.nl" Horeweg
* Lees de leesmij op www.iChris.nl/simpel-inlog-systeem/
****/
echo '<h2>Aanmelden</h2>';
// We gaan eerst kijken of het formulier al is ge"submit", zo ja, gaan we het eens goed bekijken
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Eerst gaan we kijken of de gebruiker wel alles heeft ingevuld. Vergeet niet, dat als je het formulier
// bewerkt of uitbreid, je dat veld hier ook nog in moet doen!
if(
empty($_POST['gebruikersnaam']) ||
empty($_POST['wachtwoord']) ||
empty($_POST['wachtwoord_herhalen']) ||
empty($_POST['email']) ||
empty($_POST['email_herhalen'])
){
echo '
Je moet natuurlijk wel alles invullen!
<form method="post" action="">
<table>
<tr>
<td width="150px">Gebruikersnaam:</td>
<td width="250px"><input type"text" name="gebruikersnaam" value="'.$_POST['gebruikersnaam'].'" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord:</td>
<td><input type="password" name="wachtwoord" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord herhalen:</td>
<td><input type="password" name="wachtwoord_herhalen" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres:</td>
<td><input type="text" name="email" value="'.$_POST['email'].'" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres herhalen:</td>
<td><input type="text" name="email_herhalen" value="'.$_POST['email_herhalen'].'" style="width:150px;" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="aanmelden" value="Aanmelden" style="width:150px;" /></td>
</tr>
</table>
</form>';
}
// De wachtwoorden moeten natuurlijk wel gelijk zijn...
else
if($_POST['wachtwoord'] != $_POST['wachtwoord_herhalen'])
{
echo '
De wachtwoorden zijn niet gelijk!
<form method="post" action="">
<table>
<tr>
<td width="150px">Gebruikersnaam:</td>
<td width="250px"><input type"text" name="gebruikersnaam" value="'.$_POST['gebruikersnaam'].'" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord:</td>
<td><input type="password" name="wachtwoord" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord herhalen:</td>
<td><input type="password" name="wachtwoord_herhalen" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres:</td>
<td><input type="text" name="email" value="'.$_POST['email'].'" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres herhalen:</td>
<td><input type="text" name="email_herhalen" value="'.$_POST['email_herhalen'].'" style="width:150px;" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="aanmelden" value="Aanmelden" style="width:150px;" /></td>
</tr>
</table>
</form>';
}
// Ook de e-mail adressen moeten gelijk zijn...
else
if($_POST['email'] != $_POST['email_herhalen'])
{
echo '
De e-mail adressen zijn niet gelijk!
<form method="post" action="">
<table>
<tr>
<td width="150px">Gebruikersnaam:</td>
<td width="250px"><input type"text" name="gebruikersnaam" value="'.$_POST['gebruikersnaam'].'" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord:</td>
<td><input type="password" name="wachtwoord" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord herhalen:</td>
<td><input type="password" name="wachtwoord_herhalen" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres:</td>
<td><input type="text" name="email" value="'.$_POST['email'].'" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres herhalen:</td>
<td><input type="text" name="email_herhalen" value="'.$_POST['email_herhalen'].'" style="width:150px;" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="aanmelden" value="Aanmelden" style="width:150px;" /></td>
</tr>
</table>
</form>';
}
// We gaan toch ook nog maar even kijken of de opgegeven gegevens niet al bestaan in de database!
else
if(mysql_num_rows(mysql_query("
SELECT
id
FROM
gebruikers
WHERE
gebruikersnaam = '".mysql_real_escape_string($_POST['gebruikersnaam'])."'
OR
email = '".mysql_real_escape_string($_POST['email'])."'
")))
{
echo '
De opgegeven gebruikersnaam of email adres is bij ons al bekend!
<form method="post" action="">
<table>
<tr>
<td width="150px">Gebruikersnaam:</td>
<td width="250px"><input type"text" name="gebruikersnaam" value="'.$_POST['gebruikersnaam'].'" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord:</td>
<td><input type="password" name="wachtwoord" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord herhalen:</td>
<td><input type="password" name="wachtwoord_herhalen" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres:</td>
<td><input type="text" name="email" value="'.$_POST['email'].'" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres herhalen:</td>
<td><input type="text" name="email_herhalen" value="'.$_POST['email_herhalen'].'" style="width:150px;" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="aanmelden" value="Aanmelden" style="width:150px;" /></td>
</tr>
</table>
</form>';
}
// Het lijkt erop dat alles klopt!
// Vergeet niet om hier je extra checks toe te voegen..
// Klopt het e-mail adres wel, een bepaalde lengte voor gebruikersnaam, email en wachtwoord...
// Dit zijn dingen die je zelf kunt toevoegen, zodat je hier ook nog van leert!
// Trouwens nog een korte tip, je kan op dezelfde manier als hierboven ook nog een extra
// check kunnen uitvoeren of de gebruiker al een account heeft op dit IP adres!
else
{
// Om het een beetje te beveiligen, halen we alles door "mysql_real_escape_string"
foreach($_POST as $naam => $waarde)
{
$_POST[$naam] = mysql_real_escape_string($waarde);
}
// Zo, nu gaan we alles in de database zetten.
// Let erop dat als jij extra velden heb neergezet in je form, je deze ook in je
// database moet hebben staan, en je ze ook hieronder erbij zet.
// Je zou als toevoeging nog een bevestigingsmail kunnen toevoegen. Wellicht
// dat als er vraag naar is, ik dit in een volgende versie erbij zet.
// Het is niet moeilijk om dit zelf toe te voegen, kijk daarvoor op de website
// die je helemaal van boven ziet!
$query = @mysql_query("
INSERT INTO
gebruikers (
gebruikersnaam,
wachtwoord,
email,
ip
)
VALUES (
'".$_POST['gebruikersnaam']."',
'".md5($_POST['wachtwoord'])."',
'".$_POST['email']."',
'".$_SERVER['REMOTE_ADDR']."'
)");
if(!$query)
{
// Er is iets verkeerds gegaan met de query, we moeten dat wel laten weten!
echo 'Aanmelden is niet voltooid! <br /><br />'.mysql_error();
exit;
}
else
{
// Alles is achter de rug, de gebruiker is nu geregistreerd.
// Vergeet niet dat als je een activatie link erin heb gebakken,
// je dit bericht moet aanpassen, en natuurlijk een email moet
// versturen! Anders kan de bezoeker zich nooit inloggen...
echo 'Aanmelden voltooid! U kunt nu inloggen.';
}
}
}
// Als het nog niet is gesubmit, laten we een form zien!
else
{
echo '
<form method="post" action="">
<table>
<tr>
<td width="150px">Gebruikersnaam:</td>
<td width="250px"><input type"text" name="gebruikersnaam" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord:</td>
<td><input type="password" name="wachtwoord" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Wachtwoord herhalen:</td>
<td><input type="password" name="wachtwoord_herhalen" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres:</td>
<td><input type="text" name="email" value="" style="width:150px;" /></td>
</tr>
<tr>
<td>Email adres herhalen:</td>
<td><input type="text" name="email_herhalen" value="" style="width:150px;" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="aanmelden" value="Aanmelden" style="width:150px;" /></td>
</tr>
</table>
</form>';
}
?>
Inloggen.php
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
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<html>
<body onLoad="autoChange()">
<?php
// Als het formulier is gesubmit, gaan we het verwerken
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Eerste wat we gaan checken, is of alles wel is ingevuld
if(
empty($_POST['gebruikersnaam']) ||
empty($_POST['wachtwoord'])
)
{
echo '
<form method="post" action="">
<table border="0" width="100%" height="100%">
<tr>
<td valign="middle" align="center">
<table border="0" cellpadding="0" cellspacing="0" height="113">
<tr>
<td width="230" background="./images/CMS_login.jpg" align="center">
<input type="text" name="gebruikersnaam" value="Naam">
<input type="password" name="wachtwoord" value="Wachtwoord">
</td>
<td background="./images/CMS_loginbutton2.jpg" style="border: 0px;" width="97" valign="middle" align="center">
<input type="submit" style="border: 0px; width: 58px; height: 63px; background-image: url(./images/CMS_loginbutton.jpg);" name="submit" value="">
</td>
</tr>
</table>
';
}
// Je zou er goed aan doen om nog een extra check hier neer te zetten, of de gebruikersnaam/wachtwoord wel minstens X aantal
// tekens bevat..
else
{
// We gaan een query opstellen, met daarin de gegevens die net zijn ingevuld
$query = @mysql_query("
SELECT
id
FROM
gebruikers
WHERE
gebruikersnaam = '".mysql_real_escape_string($_POST['gebruikersnaam'])."'
AND
wachtwoord = '".md5($_POST['wachtwoord'])."'
");
// Als de query is mislukt, laten we dat zien
if(!$query)
{
echo 'Er is een fout opgetreden!<br />'.mysql_error();
exit;
}
// Als de query kan worden gemaakt, gaan we kijken of de gebruiker bestaat
else
if(!mysql_num_rows($query))
{
// Zet hier iets van een melding of de gebruiker zich al eens heeft geregistreerd oid..
// Of maak een extra pagina: wachtwoord vergeten! Meer info is te vinden op de link bovenaan!
echo 'Deze combinatie is niet bekend!';
}
else
{
// Zo, de gegevens van de gebruiker kloppen, laten we hem nu maar inloggen!
// Om het allemaal zo veilig mogelijk te maken, gaan we 2 dingen doen.
// We maken een unieke cijferreeks van 40 aan, en zetten die (samen met het ip) in de
// database. De cijferreeks zetten we in een sessie, zodat we die kunnen vergelijken!
// Als je wilt weten hoe die cijferreeks wordt gemaakt, moet je even kijken in de
// functie pagina..
$cijferreeks = cijferReeks();
$_SESSION['sig'] = $cijferreeks;
$query = mysql_query("
UPDATE
gebruikers
SET
ip = '".$_SERVER['REMOTE_ADDR']."',
hash = '".$cijferreeks."'
WHERE
gebruikersnaam = '".$_POST['gebruikersnaam']."'
AND
wachtwoord = '".md5($_POST['wachtwoord'])."'
");
// Als de query is mislukt, laten we het zien
if(!$query)
{
echo 'Er is een fout opgetreden!<br />'.mysql_error();
exit;
}
else
{
?>
U bent succesvol ingelogd. Klik <a href="/klant/?pagina=index" target="_top">hier</a> om verder te gaan.
<script>
<!--
function autoChange()
{
var timeID = setTimeout("location.href= '/klant/?pagina=index'", 1)
}
//-->
</script>
<?php
}
}
}
}
else
{
// Je moet natuurlijk wel eerst een formulier invullen voordat we verder kunnen gaan..
?>
<form method="post" action="">
<table border="0" width="100%" height="100%">
<tr>
<td valign="middle" align="center">
<table border="0" cellpadding="0" cellspacing="0" height="113">
<tr>
<td width="230" background="/images/CMS_login.jpg" align="center">
<input type="text" name="gebruikersnaam" value="Naam" onclick="this.value=''" onblur="this.value==''?this.value='Naam':''">
<input type="password" name="wachtwoord" value="Wachtwoord" onclick="this.value=''" onblur="this.value==''?this.value='Wachtwoord':''">
</td>
<td background="/images/CMS_loginbutton2.jpg" style="border: 0px;" width="97" valign="middle" align="center">
<input type="submit" style="border: 0px; width: 58px; height: 63px; background-image: url(/images/CMS_loginbutton.jpg);" name="submit" value="">
</td>
</tr>
</table>
</form>
</td>
</tr>
</table>
<?php
}
?></body>
</html>
<body onLoad="autoChange()">
<?php
// Als het formulier is gesubmit, gaan we het verwerken
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Eerste wat we gaan checken, is of alles wel is ingevuld
if(
empty($_POST['gebruikersnaam']) ||
empty($_POST['wachtwoord'])
)
{
echo '
<form method="post" action="">
<table border="0" width="100%" height="100%">
<tr>
<td valign="middle" align="center">
<table border="0" cellpadding="0" cellspacing="0" height="113">
<tr>
<td width="230" background="./images/CMS_login.jpg" align="center">
<input type="text" name="gebruikersnaam" value="Naam">
<input type="password" name="wachtwoord" value="Wachtwoord">
</td>
<td background="./images/CMS_loginbutton2.jpg" style="border: 0px;" width="97" valign="middle" align="center">
<input type="submit" style="border: 0px; width: 58px; height: 63px; background-image: url(./images/CMS_loginbutton.jpg);" name="submit" value="">
</td>
</tr>
</table>
';
}
// Je zou er goed aan doen om nog een extra check hier neer te zetten, of de gebruikersnaam/wachtwoord wel minstens X aantal
// tekens bevat..
else
{
// We gaan een query opstellen, met daarin de gegevens die net zijn ingevuld
$query = @mysql_query("
SELECT
id
FROM
gebruikers
WHERE
gebruikersnaam = '".mysql_real_escape_string($_POST['gebruikersnaam'])."'
AND
wachtwoord = '".md5($_POST['wachtwoord'])."'
");
// Als de query is mislukt, laten we dat zien
if(!$query)
{
echo 'Er is een fout opgetreden!<br />'.mysql_error();
exit;
}
// Als de query kan worden gemaakt, gaan we kijken of de gebruiker bestaat
else
if(!mysql_num_rows($query))
{
// Zet hier iets van een melding of de gebruiker zich al eens heeft geregistreerd oid..
// Of maak een extra pagina: wachtwoord vergeten! Meer info is te vinden op de link bovenaan!
echo 'Deze combinatie is niet bekend!';
}
else
{
// Zo, de gegevens van de gebruiker kloppen, laten we hem nu maar inloggen!
// Om het allemaal zo veilig mogelijk te maken, gaan we 2 dingen doen.
// We maken een unieke cijferreeks van 40 aan, en zetten die (samen met het ip) in de
// database. De cijferreeks zetten we in een sessie, zodat we die kunnen vergelijken!
// Als je wilt weten hoe die cijferreeks wordt gemaakt, moet je even kijken in de
// functie pagina..
$cijferreeks = cijferReeks();
$_SESSION['sig'] = $cijferreeks;
$query = mysql_query("
UPDATE
gebruikers
SET
ip = '".$_SERVER['REMOTE_ADDR']."',
hash = '".$cijferreeks."'
WHERE
gebruikersnaam = '".$_POST['gebruikersnaam']."'
AND
wachtwoord = '".md5($_POST['wachtwoord'])."'
");
// Als de query is mislukt, laten we het zien
if(!$query)
{
echo 'Er is een fout opgetreden!<br />'.mysql_error();
exit;
}
else
{
?>
U bent succesvol ingelogd. Klik <a href="/klant/?pagina=index" target="_top">hier</a> om verder te gaan.
<script>
<!--
function autoChange()
{
var timeID = setTimeout("location.href= '/klant/?pagina=index'", 1)
}
//-->
</script>
<?php
}
}
}
}
else
{
// Je moet natuurlijk wel eerst een formulier invullen voordat we verder kunnen gaan..
?>
<form method="post" action="">
<table border="0" width="100%" height="100%">
<tr>
<td valign="middle" align="center">
<table border="0" cellpadding="0" cellspacing="0" height="113">
<tr>
<td width="230" background="/images/CMS_login.jpg" align="center">
<input type="text" name="gebruikersnaam" value="Naam" onclick="this.value=''" onblur="this.value==''?this.value='Naam':''">
<input type="password" name="wachtwoord" value="Wachtwoord" onclick="this.value=''" onblur="this.value==''?this.value='Wachtwoord':''">
</td>
<td background="/images/CMS_loginbutton2.jpg" style="border: 0px;" width="97" valign="middle" align="center">
<input type="submit" style="border: 0px; width: 58px; height: 63px; background-image: url(/images/CMS_loginbutton.jpg);" name="submit" value="">
</td>
</tr>
</table>
</form>
</td>
</tr>
</table>
<?php
}
?></body>
</html>
beheer.php
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
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
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
<?php
// Met deze functie kijken we of de gebruiker is ingelogd
if(userCheck())
{
$bestand = './' . htmlentities ($_GET['bestand']);
list($map, $file, $niets) = explode("/", $_GET['bestand']);
$query = @mysql_query("
SELECT
id, gebruikersnaam, email
FROM
gebruikers
WHERE
hash = '".$_SESSION['sig']."'
AND
ip = '".$_SERVER['REMOTE_ADDR']."'
LIMIT 1");
// Als er iets is misgegaan, laten we dat zien
if(!$query)
{
echo 'Er is een fout opgetreden!<br />'.mysql_error();
exit;
}
else
{
// Met $lijst['veldnaam'] kun je gegevens ophalen, zie hieronder!
while($lijst = @mysql_fetch_array($query))
if($map != $lijst['gebruikersnaam'])
{
exit('U heeft geen rechten om deze pagina te bewerken.');
}
if(preg_match('_\.\./_', $_GET['bestand'])) {
echo "Deze pagina mag niet worden bekeken.";
} else {
if(is_readable($bestand) == FALSE) {
die("Kon bestand niet openen: bestand is niet leesbaar");
}
if(is_writable($bestand) == FALSE) {
die("Kon bestand niet openen: bestand is niet schrijfbaar");
}
if(isset($_POST["inhoud"]) == TRUE) {
$inhoud = $_POST["inhoud"];
$handeling = fopen($bestand,"w") or die("Kon bestand niet openen om te schrijven");
$schrijf = fwrite($handeling,stripslashes($inhoud)) or die("Kon niet naar bestand schrijven");
echo "<b>Het bestand is succesvol bewerkt.</b><br><br>Klik <a href=\"?pagina=extra\">hier</a> om terug te gaan naar het overzicht.";
die();
}
$inhoud = file_get_contents($bestand) or die("Kon bestand niet openen om uit te lezen");
echo ' <html>
<head>
<title>Bestand editten</title>
<link href="sample.css" rel="stylesheet" type="text/css" />
<script type="fckeditor.js"></script>
</head>
<style>
.update {
background-color: #ffffff;
color: #EE3034;
border: 1px solid #999999;
font-family: Arial;
font-size: 12px;
}
</style>
<body bgcolor="#ffffff">
';
include("fckeditor.php");?>
<form action="<?php $_POST["PHP_SELF"]?>" method="post">
<?php
$sBasePath = $_SERVER['PHP_SELF'] ;
$sBasePath = substr( $sBasePath, 0, strpos( $sBasePath, "_samples" ) ) ;
$oFCKeditor = new FCKeditor('inhoud') ;
$oFCKeditor->BasePath = $sBasePath ;
$oFCKeditor->Height = 600 ;
$oFCKeditor->Value = $inhoud ;
$oFCKeditor->Create() ;
echo ' <input type="submit" class="update" value="Update pagina >>">
</form>
</body>
</html>';
}
}
}
else
{
// De gebruiker is niet ingelogd, en mag dus niets zien
echo 'Deze pagina is alleen te bekijken wanneer u bent ingelogd. Klik <a href="?pagina=inloggen" target="_top">hier</a> om in te loggen.';
}
?>
// Met deze functie kijken we of de gebruiker is ingelogd
if(userCheck())
{
$bestand = './' . htmlentities ($_GET['bestand']);
list($map, $file, $niets) = explode("/", $_GET['bestand']);
$query = @mysql_query("
SELECT
id, gebruikersnaam, email
FROM
gebruikers
WHERE
hash = '".$_SESSION['sig']."'
AND
ip = '".$_SERVER['REMOTE_ADDR']."'
LIMIT 1");
// Als er iets is misgegaan, laten we dat zien
if(!$query)
{
echo 'Er is een fout opgetreden!<br />'.mysql_error();
exit;
}
else
{
// Met $lijst['veldnaam'] kun je gegevens ophalen, zie hieronder!
while($lijst = @mysql_fetch_array($query))
if($map != $lijst['gebruikersnaam'])
{
exit('U heeft geen rechten om deze pagina te bewerken.');
}
if(preg_match('_\.\./_', $_GET['bestand'])) {
echo "Deze pagina mag niet worden bekeken.";
} else {
if(is_readable($bestand) == FALSE) {
die("Kon bestand niet openen: bestand is niet leesbaar");
}
if(is_writable($bestand) == FALSE) {
die("Kon bestand niet openen: bestand is niet schrijfbaar");
}
if(isset($_POST["inhoud"]) == TRUE) {
$inhoud = $_POST["inhoud"];
$handeling = fopen($bestand,"w") or die("Kon bestand niet openen om te schrijven");
$schrijf = fwrite($handeling,stripslashes($inhoud)) or die("Kon niet naar bestand schrijven");
echo "<b>Het bestand is succesvol bewerkt.</b><br><br>Klik <a href=\"?pagina=extra\">hier</a> om terug te gaan naar het overzicht.";
die();
}
$inhoud = file_get_contents($bestand) or die("Kon bestand niet openen om uit te lezen");
echo ' <html>
<head>
<title>Bestand editten</title>
<link href="sample.css" rel="stylesheet" type="text/css" />
<script type="fckeditor.js"></script>
</head>
<style>
.update {
background-color: #ffffff;
color: #EE3034;
border: 1px solid #999999;
font-family: Arial;
font-size: 12px;
}
</style>
<body bgcolor="#ffffff">
';
include("fckeditor.php");?>
<form action="<?php $_POST["PHP_SELF"]?>" method="post">
<?php
$sBasePath = $_SERVER['PHP_SELF'] ;
$sBasePath = substr( $sBasePath, 0, strpos( $sBasePath, "_samples" ) ) ;
$oFCKeditor = new FCKeditor('inhoud') ;
$oFCKeditor->BasePath = $sBasePath ;
$oFCKeditor->Height = 600 ;
$oFCKeditor->Value = $inhoud ;
$oFCKeditor->Create() ;
echo ' <input type="submit" class="update" value="Update pagina >>">
</form>
</body>
</html>';
}
}
}
else
{
// De gebruiker is niet ingelogd, en mag dus niets zien
echo 'Deze pagina is alleen te bekijken wanneer u bent ingelogd. Klik <a href="?pagina=inloggen" target="_top">hier</a> om in te loggen.';
}
?>
Wat ik kon bedenken is het wachtwoord met md5 op te slaan, en te kijken naar Mysql injection.
Graag hoor ik van jullie wat nog voor verbetering vatbaar is.
Groetjes,
Anne
heb je ergens een werkend voorbeeld waar we ons op kunnen uitleven
bart van der veen schreef op 09.09.2008 19:11:
heb je ergens een werkend voorbeeld waar we ons op kunnen uitleven
http://www.ichris.nl/simpel-inlog-systeem/?pagina=inloggen
Daar staat het wel op!
MySQL injectie op een wachtwoord is niet mogelijk als je deze MD5't, en vanwege mysql_real_escape_string is de gebruikersnaam beveiligd.
Je zou qua veiligheid van het systeem de hashwaarde kunnen uitbreiden, een MD5 kunnen maken van gebruikersnaam, ip en een random waarde. Deze in de sessie en database stoppen, werkt in princiepe hetzelfde als de huidige..
Wat het MD5'en van gebruikersnaam, ip, enz. betreft: ik zal ook veel gebruikers moeten verwijderen via phpmyadmin, dus dan is het niet zo makkelijk als het versleuteld staat.
Wat jullie betreft is dit script dus redelijk veilig, en kan ik dit gebruiken voor een CMS waarbij mensen hun pagina kunnen aanpassen?
Het mag dus absoluut niet zo zijn dat een account gehackt kan worden, dan zijn de gevolgen niet te overzien...
En iChris, heel hartelijk dank voor het schrijven van dit prachtige "basisscript"!!
Geen probleem, het is niet volledig, en er zijn genoeg dingen die er anders kunnen. Maar, zoals eigenlijk overal staat, het is een beginsel en de gebruiker dient zelf dit script uit te breiden en veiliger maken ^_^