Beveiligde pagina's
Ik heb nu het volgende script voor een pagina die ik moet beveiligen achter een wachtwoord.
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
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
<?php
// sql connectie includen
include('contactdb.php');
// waar moet de bezoeker heengestuurd worden nadat hij/zij succesvol ingelogd is ?
$redirect_pagina = "index.php";
if ($_GET['actie'] == 'inloggen') {
// als inlogformulier is verstuurd
$sql = "SELECT * FROM members WHERE inlognaam='".$_POST['inlognaam']."'";
$resultaat = mysql_query($sql) OR die ("Kon geen verbinding maken met MySQL");
$aantal = mysql_num_rows($resultaat);
if ($aantal == '0') {
// als er geen resultaat is gevonden
echo "Het door u ingevulde inlognaam bestaat niet.";
} else {
$login = mysql_fetch_object($resultaat);
$login->passwoord;
$login->inlognaam;
if($_POST['passwoord'] == $login->passwoord) {
// als gegevens kloppen met gegevens uit database, cookies setten en doorsturen!
setcookie("inlognaam", $_POST['inlognaam'], time() + 60*60); // cookie blijft 60 keer 60 seconden bestaan
setcookie("passwoord", $_POST['wachtwoord'], time() + 60*60);
echo "U bent succesvol ingelogd, een moment.. <META HTTP-EQUIV=\"REFRESH\" CONTENT=\"2; URL=".$redirect_pagina."\">";
} else {
echo "Uw inloggegevens kloppen niet, klik <a href=\"".$_SERVER['PHP_SELF']."\">hier</a> om nogmaals te proberen.";
}
}
} else if ($_GET['actie'] == 'registreren') {
// als men zich wil registreren
if ($_GET['versturen'] == 'ja') {
// als formulier reeds is verstuurd
if (empty($_POST['inlognaam'])) {
echo "Je hebt geen inlognaam ingevuld, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else if (empty($_POST['passwoord'])) {
echo "Je hebt geen passwoord ingevuld, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else if (empty($_POST['passwoord_controle'])) {
echo "Je moet ter controle ook het controleveld voor het passwoord invullen, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else {
if ($_POST['passwoord'] != $_POST['passwoord_controle']) {
echo "De ingevoerde passwoorden kwamen niet overeen, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else {
$registreer = "INSERT INTO members (inlognaam, passwoord) VALUES ('".$_POST['inlognaam']."', '".$_POST['passwoord']."')";
mysql_query($registreer) or die(mysql_error());
echo "Uw gegevens zijn succesvol opgeslagen! Klik <a href=\"".$_SERVER['PHP_SELF']."\">hier</a> om in te kunnen loggen.";
}
}
} else {
// als formulier nog niet is verstuurd, toon registratieformulier
echo "<form action=\"".$_SERVER['PHP_SELF']."?actie=registreren&versturen=ja\" method=\"post\">
<table>
<tr><th colspan=\"2\">Registreren</th></tr>
<tr><td>Inlognaam</td><td><input type=\"text\" name=\"inlognaam\" size=\"15\"></td></tr>
<tr><td>Passwoord</td><td><input type=\"password\" name=\"passwoord\" size=\"15\"></td></tr>
<tr><td>Passwoord <small>(controle)</small></td><td><input type=\"password\" name=\"passwoord_controle\" size=\"15\"></td></tr>
<tr><td></td><td><input type=\"submit\" value=\"Registreer\"></td></tr>
</table></form>";
}
} else {
// inlogformulier
echo "<form action=\"".$_SERVER['PHP_SELF']."?actie=inloggen\" method=\"post\">
<table>
<tr><th colspan=\"2\">Inloggen</th></tr>
<tr><td>Inlognaam</td><td><input type=\"text\" name=\"inlognaam\" size=\"15\"></td></tr>
<tr><td>Passwoord</td><td><input type=\"password\" name=\"passwoord\" size=\"15\"></td></tr>
<tr><td></td><td><input type=\"submit\" value=\"Inloggen\"></td></tr>
<tr><td></td><td><a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Registreren</a></td></tr>
</table></form>";
}
?>
// sql connectie includen
include('contactdb.php');
// waar moet de bezoeker heengestuurd worden nadat hij/zij succesvol ingelogd is ?
$redirect_pagina = "index.php";
if ($_GET['actie'] == 'inloggen') {
// als inlogformulier is verstuurd
$sql = "SELECT * FROM members WHERE inlognaam='".$_POST['inlognaam']."'";
$resultaat = mysql_query($sql) OR die ("Kon geen verbinding maken met MySQL");
$aantal = mysql_num_rows($resultaat);
if ($aantal == '0') {
// als er geen resultaat is gevonden
echo "Het door u ingevulde inlognaam bestaat niet.";
} else {
$login = mysql_fetch_object($resultaat);
$login->passwoord;
$login->inlognaam;
if($_POST['passwoord'] == $login->passwoord) {
// als gegevens kloppen met gegevens uit database, cookies setten en doorsturen!
setcookie("inlognaam", $_POST['inlognaam'], time() + 60*60); // cookie blijft 60 keer 60 seconden bestaan
setcookie("passwoord", $_POST['wachtwoord'], time() + 60*60);
echo "U bent succesvol ingelogd, een moment.. <META HTTP-EQUIV=\"REFRESH\" CONTENT=\"2; URL=".$redirect_pagina."\">";
} else {
echo "Uw inloggegevens kloppen niet, klik <a href=\"".$_SERVER['PHP_SELF']."\">hier</a> om nogmaals te proberen.";
}
}
} else if ($_GET['actie'] == 'registreren') {
// als men zich wil registreren
if ($_GET['versturen'] == 'ja') {
// als formulier reeds is verstuurd
if (empty($_POST['inlognaam'])) {
echo "Je hebt geen inlognaam ingevuld, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else if (empty($_POST['passwoord'])) {
echo "Je hebt geen passwoord ingevuld, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else if (empty($_POST['passwoord_controle'])) {
echo "Je moet ter controle ook het controleveld voor het passwoord invullen, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else {
if ($_POST['passwoord'] != $_POST['passwoord_controle']) {
echo "De ingevoerde passwoorden kwamen niet overeen, <a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Probeer nogmaals</a>.";
} else {
$registreer = "INSERT INTO members (inlognaam, passwoord) VALUES ('".$_POST['inlognaam']."', '".$_POST['passwoord']."')";
mysql_query($registreer) or die(mysql_error());
echo "Uw gegevens zijn succesvol opgeslagen! Klik <a href=\"".$_SERVER['PHP_SELF']."\">hier</a> om in te kunnen loggen.";
}
}
} else {
// als formulier nog niet is verstuurd, toon registratieformulier
echo "<form action=\"".$_SERVER['PHP_SELF']."?actie=registreren&versturen=ja\" method=\"post\">
<table>
<tr><th colspan=\"2\">Registreren</th></tr>
<tr><td>Inlognaam</td><td><input type=\"text\" name=\"inlognaam\" size=\"15\"></td></tr>
<tr><td>Passwoord</td><td><input type=\"password\" name=\"passwoord\" size=\"15\"></td></tr>
<tr><td>Passwoord <small>(controle)</small></td><td><input type=\"password\" name=\"passwoord_controle\" size=\"15\"></td></tr>
<tr><td></td><td><input type=\"submit\" value=\"Registreer\"></td></tr>
</table></form>";
}
} else {
// inlogformulier
echo "<form action=\"".$_SERVER['PHP_SELF']."?actie=inloggen\" method=\"post\">
<table>
<tr><th colspan=\"2\">Inloggen</th></tr>
<tr><td>Inlognaam</td><td><input type=\"text\" name=\"inlognaam\" size=\"15\"></td></tr>
<tr><td>Passwoord</td><td><input type=\"password\" name=\"passwoord\" size=\"15\"></td></tr>
<tr><td></td><td><input type=\"submit\" value=\"Inloggen\"></td></tr>
<tr><td></td><td><a href=\"".$_SERVER['PHP_SELF']."?actie=registreren\">Registreren</a></td></tr>
</table></form>";
}
?>
Het registreren werkt prima en de loginnaam en wachtwoord worden opgeslagen in de database. Echter als ik vervolgens inlog krijg ik eerst de melding dat ik goed heb ingelogd. Tot zover gaat het goed. Daarna krijg ik echter de melding dat de cookies niet gecombineerd kunnen worden (is een tekst uit het script maar ik weet niet waarom het niet lukt omdat het ingevoerde wachtwoord en loginnaam wel kloppen met de database).
Op de beveiligde pagina's heb ik het volgende script:
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
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
<?php
// sql connectie includen
include('contactdb.php');
// inlogpagina
$login_pagina = "login.php";
$sql = "SELECT * FROM members WHERE inlognaam='".$_COOKIE['inlognaam']."'";
$resultaat = mysql_query($sql) OR die ("Kon geen verbinding maken met MySQL");
$aantal = mysql_num_rows($resultaat);
if ($aantal == '0') {
// de waarde van de aanwezige inlognaam-cookie bij de bezoeker komt niet overeen met een waarde uit de database
echo "Klik <a href=\"".$login_pagina."\">hier</a> om in te kunnen loggen.";
} else {
$login = mysql_fetch_object($resultaat);
if ($_COOKIE['passwoord'] != $login->passwoord || $_COOKIE['inlognaam'] != $login->inlognaam) {
echo "De cookies konden niet gecombineerd worden.";
} else {
// de beveiligde inhoud tonen;
echo '<h2>Beheer Pagina</h2>
<a href="toevoegen-media.php"><strong>Media Toevoegen</strong></a> | <a href="beheer-media.php"><strong>Beheer Media</strong></a>
<hr />
MediaBase - Beheer Pagina';
}
}
?>
// sql connectie includen
include('contactdb.php');
// inlogpagina
$login_pagina = "login.php";
$sql = "SELECT * FROM members WHERE inlognaam='".$_COOKIE['inlognaam']."'";
$resultaat = mysql_query($sql) OR die ("Kon geen verbinding maken met MySQL");
$aantal = mysql_num_rows($resultaat);
if ($aantal == '0') {
// de waarde van de aanwezige inlognaam-cookie bij de bezoeker komt niet overeen met een waarde uit de database
echo "Klik <a href=\"".$login_pagina."\">hier</a> om in te kunnen loggen.";
} else {
$login = mysql_fetch_object($resultaat);
if ($_COOKIE['passwoord'] != $login->passwoord || $_COOKIE['inlognaam'] != $login->inlognaam) {
echo "De cookies konden niet gecombineerd worden.";
} else {
// de beveiligde inhoud tonen;
echo '<h2>Beheer Pagina</h2>
<a href="toevoegen-media.php"><strong>Media Toevoegen</strong></a> | <a href="beheer-media.php"><strong>Beheer Media</strong></a>
<hr />
MediaBase - Beheer Pagina';
}
}
?>
Wachtwoord in een Cookie is heel fout.
Ook is het wachtwoord niet gecodeerd, dus zo te lezen.
Bovenstaande scripts zijn zeer eenvoudig te hacken.
Gewijzigd op 27/06/2011 14:00:11 door - SanThe -
@santhe;
Buiten de sql injectie maar een wachtwoord opslaan in een cookie is toch niet zo`n ramp? Deze wordt immers lokaal opgeslagen en waarschijnlijk weer de eigenaar c.q. gebruiker zelf wel wat die in getypt heeft of zit ik er totaal naast?
Groeten, Antony
Verdiep je eens in XXS ;-)