Uitloggen.
Waarom werkt dit script niet.
Het is voor de gebruiker te laten uitloggen.
Het is voor de gebruiker te laten uitloggen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
session_start();
$_SESSION['id'] = '';
$_SESSION['md5_id'] = '';
$_SESSION['username'] = '';
$_SESSION['sha1_password'] = '';
echo "Je bent succesvol uitgelogd.";
?>
session_start();
$_SESSION['id'] = '';
$_SESSION['md5_id'] = '';
$_SESSION['username'] = '';
$_SESSION['sha1_password'] = '';
echo "Je bent succesvol uitgelogd.";
?>
Gewijzigd op 05/06/2010 11:27:52 door Robin van der Vliet
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
session_start();
session_unset();
session_destroy();
echo "Je bent succesvol uitgelogd.";
?>
session_start();
session_unset();
session_destroy();
echo "Je bent succesvol uitgelogd.";
?>
Hij leegt ze nu wel maar het werkt nog niet.
Het kan ook komen door het login script.
Dit is het login script:
Het kan ook komen door het login script.
Dit is het login 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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
<?php
session_start();
// MYSQL database login hidden. ;)
if (!$_SESSION['username'] = "")
{
echo "Je bent al ingelogd ".$_SESSION['username'].".";
}
else
{
echo '<form method="post">';
echo 'Gebruikersnaam <input type="text" name="username" size="15"><br>';
echo 'Wachtwoord <input type="password" name="password" size="15"><br>';
echo '<input name="submit" type="submit" value="Inloggen">';
echo '</form>';
}
if ($_POST['submit'])
{
$username = $_POST['username'];
$password = $_POST['password'];
$md5_password = (md5($password));
$username_aantal = mysql_query("Select Count(username) From gebruikers Where username = '".$username."'") or die(mysql_error());
$password_aantal = mysql_query("Select Count(username) From gebruikers Where md5_password = '".$md5_password."'") or die(mysql_error());
if (mysql_result($username_aantal, 0) && mysql_result($password_aantal, 0))
{
$sql = mysql_query("SELECT * FROM gebruikers WHERE username = '" . $username . "' AND md5_password = '" . $md5_password . "'");
$fetch = mysql_fetch_assoc($sql);
$_SESSION['id'] = $fetch['id'];
$_SESSION['md5_id'] = $fetch['md5_id'];
$_SESSION['username'] = $fetch['username'];
$_SESSION['md5_password'] = $fetch['md5_password'];
echo "Je bent succesvol ingelogd ".$_SESSION['username'].".";
}
else
{
echo "Gebruikersnaam of wachtwoord incorrect.";
}
}
?>
session_start();
// MYSQL database login hidden. ;)
if (!$_SESSION['username'] = "")
{
echo "Je bent al ingelogd ".$_SESSION['username'].".";
}
else
{
echo '<form method="post">';
echo 'Gebruikersnaam <input type="text" name="username" size="15"><br>';
echo 'Wachtwoord <input type="password" name="password" size="15"><br>';
echo '<input name="submit" type="submit" value="Inloggen">';
echo '</form>';
}
if ($_POST['submit'])
{
$username = $_POST['username'];
$password = $_POST['password'];
$md5_password = (md5($password));
$username_aantal = mysql_query("Select Count(username) From gebruikers Where username = '".$username."'") or die(mysql_error());
$password_aantal = mysql_query("Select Count(username) From gebruikers Where md5_password = '".$md5_password."'") or die(mysql_error());
if (mysql_result($username_aantal, 0) && mysql_result($password_aantal, 0))
{
$sql = mysql_query("SELECT * FROM gebruikers WHERE username = '" . $username . "' AND md5_password = '" . $md5_password . "'");
$fetch = mysql_fetch_assoc($sql);
$_SESSION['id'] = $fetch['id'];
$_SESSION['md5_id'] = $fetch['md5_id'];
$_SESSION['username'] = $fetch['username'];
$_SESSION['md5_password'] = $fetch['md5_password'];
echo "Je bent succesvol ingelogd ".$_SESSION['username'].".";
}
else
{
echo "Gebruikersnaam of wachtwoord incorrect.";
}
}
?>
Gewijzigd op 05/06/2010 11:29:14 door Robin van der Vliet
Wat werkt er nu dan niet? Kun je iets meer informatie geven?
moet worden
Dat werkt nog steeds niet, de variable is wel leeg.
Deze tekst krijg ik alleen: Je bent al ingelogd .
Deze tekst krijg ik alleen: Je bent al ingelogd .
Offtopic, waarom zet je trouwens het wachtwoord ook in een sessie.. niet echt veilig!
Edit: lol mijn fout, het moet zijn:
Edit: lol mijn fout, het moet zijn:
Gewijzigd op 05/06/2010 11:35:20 door vdleije .
Je moet niet te veel in een sessie zetten, het gebruikers id en een sessie met TRUE of FALSE is meer dan genoeg!
Het werkt.
Bedankt, het is opgelost.
Hoezo is dat niet veilig?
Bedankt, het is opgelost.
FRizZL isMijnUsername op 05/06/2010 11:34:05:
Offtopic, waarom zet je trouwens het wachtwoord ook in een sessie.. niet echt veilig!
Hoezo is dat niet veilig?
Laat ik het anders formuleren, waarom heb je het nodig? Je kan toch gewoon één of twee sessies doorsturen met bijvoorbeeld $_SESSION['login'] = true en $_SESSION['id'] = GEBRUIKERSID, zoals Bram Boos al zei.
Je weet al dat de inloggegevens goed zijn ingevuld door de gebruiker bij het inloggen en de rest is af te leiden aan de hand van bijvoorbeeld de gebruikersid.
Je weet al dat de inloggegevens goed zijn ingevuld door de gebruiker bij het inloggen en de rest is af te leiden aan de hand van bijvoorbeeld de gebruikersid.
FRizZL isMijnUsername op 05/06/2010 12:16:05:
Je weet al dat de inloggegevens goed zijn ingevuld door de gebruiker bij het inloggen en de rest is af te leiden aan de hand van bijvoorbeeld de gebruikersid.
En als ze dan de sessie veranderen in een ander id, dan zitten ze gewoon op iemand anders account.
Lock de sessie dan aan een ip
En als je magic_quotes_gpc uit heb staan (wat aangeraden is) kan iedereen met de 1e gebruiker inloggen door als username het volgende op te geven:
' or 1 or '
Wel moet je het wachtwoord weten van een account.
Fix voor de username:
' or 1 or '
Wel moet je het wachtwoord weten van een account.
Fix voor de username:
Niels Hop op 06/06/2010 11:30:48:
Lock de sessie dan aan een ip
En hoe doe je dat?
Peter datwiljewelwetenhe op 06/06/2010 11:57:23:
En als je magic_quotes_gpc uit heb staan (wat aangeraden is)
En hoe zet je dat uit?
Peter datwiljewelwetenhe op 06/06/2010 11:57:23:
Fix voor de username:
Dit gebeurde een stuk later in het script. ;)
Gewijzigd op 06/06/2010 12:15:59 door Robin van der Vliet
Als je magic_quotes_gpc uit het staan: mysql_real_escape_string moet je toepassen op elke variabele die je in een SQL query plakt. Hier doe je
En vervolgens ga je deze variabelen in query's plakken ZONDER mysql_real_escape_string
Voor het password wellicht in theorie niet zo heel gevaarlijk in dit geval, maar wat betreft de username zit daar een heel groot gapend beveiligings gat.
Zoieso zit het login script raar in elkaar. Je controleert of de username voorkomt en of het paswoord voorkomt. Maar nergens controleer je of username en paswoord bij elkaar horen. Als username en paswoord beide ergens in de database voorkomen (mogelijk bij verschillende gebruikers), doe je
en vervolgens haal je het resultaat op zonder te controlerne of er überhaupt resultaat is.
Code (php)
1
2
3
2
3
$username = $_POST['username'];
$password = $_POST['password'];
$md5_password = (md5($password));
$password = $_POST['password'];
$md5_password = (md5($password));
En vervolgens ga je deze variabelen in query's plakken ZONDER mysql_real_escape_string
Code (php)
1
2
2
$username_aantal = mysql_query("Select Count(username) From gebruikers Where username = '".$username."'") or die(mysql_error());
$password_aantal = mysql_query("Select Count(username) From gebruikers Where md5_password = '".$md5_password."'") or die(mysql_error());
$password_aantal = mysql_query("Select Count(username) From gebruikers Where md5_password = '".$md5_password."'") or die(mysql_error());
Zoieso zit het login script raar in elkaar. Je controleert of de username voorkomt en of het paswoord voorkomt. Maar nergens controleer je of username en paswoord bij elkaar horen. Als username en paswoord beide ergens in de database voorkomen (mogelijk bij verschillende gebruikers), doe je
Code (php)
1
SELECT * FROM gebruikers WHERE username = '" . $username . "' AND md5_password = '" . $md5_password . "'
Gewijzigd op 06/06/2010 14:34:19 door Piet Verhagen
Dit fenomeen heet MySQL InjectionMySQL Injection




