Uit het niets plots ingelogd als Guest?
Ik heb net het vreemdste ooit meegemaakt.
Ik heb een indexpagina met het volgende:
Ben je ingelogd, dan toont die: "Hallo username".
Ingelogde users hebben ook de optie om restricted pagina's te bekijken.
Ben je niet ingelogd, dan: "Hallo, gelieve in te loggen".
Nu heb ik dit script een 6maanden geleden online gezet op een website om dit te tonen aan een paar vrienden. Alles werkte perfect.
Nu kom ik, 6 maand later, terug op die site, en staat er:
"Hallo Guest"! Ik kon ook, net zoals wanneer ik ingelogd zou zijn, de restricted pagina's bekijken.
Daarna heb ik uitgelogd, en was alles terug in orde, en heb ik die "Hallo Guest" nooit meer gezien.
Extra info: er is géén user geregistreerd met als username Guest, en in mijn script komt nergens het woord Guest voor...
Proberen inloggen met username Guest en bijvoorbeeld geen paswoord, lukt dan ook niet.
Iemand enig idee hoe dit kan? Ik weet hoe zot dit klinkt, maar het is weldegelijk echt gebeurd...
Het is vooral vervelend omdat het dan ook bij anderen kan voor komen, en die dus oningelogd de restricted pagina's kunnen bekijken...
Heb je relevante code?
En misschien een link naar de website?
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
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
<?php
[code]<?php
include('config.php')
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="<?php echo $design; ?>/style.css" rel="stylesheet" title="Style" />
<title>Members Area</title>
</head>
<body>
<div class="header">
<a href="<?php echo $url_home; ?>"><img src="<?php echo $design; ?>/images/logo_.png" alt="Members Area" /></a>
</div>
<div class="content">
<?php
//We display a welcome message, if the user is logged, we display it username
?>
Hallo<?php if(isset($_SESSION['username'])){echo ' '.htmlentities($_SESSION['username'], ENT_QUOTES, 'UTF-8');} ?>,<br />
Welkom op onze website.<br />
<br />
<?php
//Als de user ingelogd is, tonen we info:
if(isset($_SESSION['username']))
{
?>
<a href="profile.php?id=<?php echo $_SESSION['userid'] ?>">Mijn persoonlijke pagina</a><br />
<a href="somepage1.php">Restricted page1</a><br />
<a href="somepage2.php">Restricted page2</a><br />
<a href="connection.php">Logout</a>
<?php
}
else
{
//Is de user niet ingelogd, dan tonen we andere info:
?>
<a href="sign_up.php">Sign up</a><br />
<a href="connection.php">Log in</a>
<?php
}
?>
</div>
</body>
</html>
?>
[code]<?php
include('config.php')
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="<?php echo $design; ?>/style.css" rel="stylesheet" title="Style" />
<title>Members Area</title>
</head>
<body>
<div class="header">
<a href="<?php echo $url_home; ?>"><img src="<?php echo $design; ?>/images/logo_.png" alt="Members Area" /></a>
</div>
<div class="content">
<?php
//We display a welcome message, if the user is logged, we display it username
?>
Hallo<?php if(isset($_SESSION['username'])){echo ' '.htmlentities($_SESSION['username'], ENT_QUOTES, 'UTF-8');} ?>,<br />
Welkom op onze website.<br />
<br />
<?php
//Als de user ingelogd is, tonen we info:
if(isset($_SESSION['username']))
{
?>
<a href="profile.php?id=<?php echo $_SESSION['userid'] ?>">Mijn persoonlijke pagina</a><br />
<a href="somepage1.php">Restricted page1</a><br />
<a href="somepage2.php">Restricted page2</a><br />
<a href="connection.php">Logout</a>
<?php
}
else
{
//Is de user niet ingelogd, dan tonen we andere info:
?>
<a href="sign_up.php">Sign up</a><br />
<a href="connection.php">Log in</a>
<?php
}
?>
</div>
</body>
</html>
?>
Toevoeging op 23/05/2011 14:46:34:
Ik heb voor de duidelijkheid rond de hele code even geplaatst omdat het anders te onverzichtelijk werd (dit staat dus niet in echte script).
Op de restricted pagina's wordt via deze code nagegaan of, en welke, user is ingelogd:
if(isset($_SESSION['username']))
Gewijzigd op 23/05/2011 14:48:40 door Sure Is
Heb je ook de code waar de username wordt geset? En wat is de url?
Staat superglobals op off?
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
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
<?php
[code]<?php
include('config.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="<?php echo $design; ?>/style.css" rel="stylesheet" title="Style" />
<title>Connexion</title>
</head>
<body>
<div class="header">
<a href="<?php echo $url_home; ?>"><img src="<?php echo $design; ?>/images/logo_.png" alt="Members Area" /></a>
</div>
<?php
if (isset($_GET['expired'])) {
$expired_message = "Uw sessie is afgelopen. U kan hieronder opnieuw inloggen<br />";
}
?>
<?php
//Als user al ingelogd is, moet hij uitloggen
if(isset($_SESSION['username']))
{
//We loggen hem uit door de username and userid sessions te deleten
unset($_SESSION['username'], $_SESSION['userid']);
?>
<div class="message">You have successfuly been loged out.<br />
<a href="<?php echo $url_home; ?>">Home</a></div>
<?php
}
else
{
//We check if the form has been sent
if(isset($_POST['username'], $_POST['password']))
{
//We remove slashes depending on the configuration
if(get_magic_quotes_gpc())
{
$ousername = stripslashes($_POST['username']);
$username = mysql_real_escape_string(stripslashes($_POST['username']));
$password = stripslashes($_POST['password']);
}
else
{
$username = mysql_real_escape_string($_POST['username']);
$password = $_POST['password'];
}
//We get the password of the user
$req = mysql_query('select upassword, uid FROM users WHERE uuser="'.$username.'"');
$dn = mysql_fetch_array($req);
if($dn['upassword']==$password and mysql_num_rows($req)>0)
{
//Paswoord ok? Dan form niet tonen
$form = false;
//username en id saven in de session
$_SESSION['username'] = $_POST['username'];
$_SESSION['userid'] = $dn['uid'];
?>
<div class="message">You have successfuly been logged. You can access to your member area.<br />
<a href="<?php echo $url_home; ?>">Home</a></div>
<?php
}
else
{
//Paswoord fout
$form = true;
$message = 'The username or password is incorrect.';
}
}
else
{
$form = true;
}
if($form)
{
//Message tonen
if(isset($message))
{
echo '<div class="message">'.$message.'</div>';
}
?>
<div class="content">
<form action="connection.php" method="post">
<?php echo $expired_message ?><br />
Vul u ID en paswoord in a.u.b.:<br />
<div class="center">
<label for="username">Username</label><input type="text" name="username" id="username" value="<?php echo htmlentities($ousername, ENT_QUOTES, 'UTF-8'); ?>" /><br />
<label for="password">Password</label><input type="password" name="password" id="password" /><br />
<input type="submit" value="Log in" />
</div>
</form>
</div>
<?php
}
}
?>
</body>
</html>
?>
[code]<?php
include('config.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="<?php echo $design; ?>/style.css" rel="stylesheet" title="Style" />
<title>Connexion</title>
</head>
<body>
<div class="header">
<a href="<?php echo $url_home; ?>"><img src="<?php echo $design; ?>/images/logo_.png" alt="Members Area" /></a>
</div>
<?php
if (isset($_GET['expired'])) {
$expired_message = "Uw sessie is afgelopen. U kan hieronder opnieuw inloggen<br />";
}
?>
<?php
//Als user al ingelogd is, moet hij uitloggen
if(isset($_SESSION['username']))
{
//We loggen hem uit door de username and userid sessions te deleten
unset($_SESSION['username'], $_SESSION['userid']);
?>
<div class="message">You have successfuly been loged out.<br />
<a href="<?php echo $url_home; ?>">Home</a></div>
<?php
}
else
{
//We check if the form has been sent
if(isset($_POST['username'], $_POST['password']))
{
//We remove slashes depending on the configuration
if(get_magic_quotes_gpc())
{
$ousername = stripslashes($_POST['username']);
$username = mysql_real_escape_string(stripslashes($_POST['username']));
$password = stripslashes($_POST['password']);
}
else
{
$username = mysql_real_escape_string($_POST['username']);
$password = $_POST['password'];
}
//We get the password of the user
$req = mysql_query('select upassword, uid FROM users WHERE uuser="'.$username.'"');
$dn = mysql_fetch_array($req);
if($dn['upassword']==$password and mysql_num_rows($req)>0)
{
//Paswoord ok? Dan form niet tonen
$form = false;
//username en id saven in de session
$_SESSION['username'] = $_POST['username'];
$_SESSION['userid'] = $dn['uid'];
?>
<div class="message">You have successfuly been logged. You can access to your member area.<br />
<a href="<?php echo $url_home; ?>">Home</a></div>
<?php
}
else
{
//Paswoord fout
$form = true;
$message = 'The username or password is incorrect.';
}
}
else
{
$form = true;
}
if($form)
{
//Message tonen
if(isset($message))
{
echo '<div class="message">'.$message.'</div>';
}
?>
<div class="content">
<form action="connection.php" method="post">
<?php echo $expired_message ?><br />
Vul u ID en paswoord in a.u.b.:<br />
<div class="center">
<label for="username">Username</label><input type="text" name="username" id="username" value="<?php echo htmlentities($ousername, ENT_QUOTES, 'UTF-8'); ?>" /><br />
<label for="password">Password</label><input type="password" name="password" id="password" /><br />
<input type="submit" value="Log in" />
</div>
</form>
</div>
<?php
}
}
?>
</body>
</html>
?>
Gewijzigd op 23/05/2011 18:59:10 door Sure Is
Ja, zo logged hij iedere keer uit op het moment dat hij is ingelogged.
Wanneer een niet-ingelogde user deze pagina bezoekt, krijgt hij een inlogscherm, na inloggen krijgt hij de melding "You have successfuly been logged. You can access to your member area.", met een linkje erbij. Hij wordt dus NIET automatisch uitgelogd meteen ofzo...
Bezoekt een ingelogde user deze pagina, dan wordt hij uitgelogd.
Deze pagina wordt dus zowel als login als logout pagina gebruikt... ik doe dit wel meer, ik denk niet dat het probleem daar zit...
Nog ideeën? Is mijn code ergens onveilig?
Bedankt al van de aanvullingen!
Gewijzigd op 24/05/2011 00:22:15 door Sure Is
Kun je eens een url geven waar het script nu draait? En weet je verder zeker dat het jou website was? En niemand een usname of wat dan ook voor de grap verandert?
Ik ben 100% zeker dat het geen grap ofzo was, het is geen openbare site, enkel ik en nog iemand wisten de url (en hij weet ook van niks), omdat het een site in opbouw was.
Extra info:
Een van de restricted pagina's laat je toe tekst te posten op die pagina (gastenboek-achtig). Het script savet die tekst, met een extra id, namelijk de id die hoort bij de user. Toen ik als "Guest" was ingelogd, heb ik een tekst gepost, en bij die tekst heeft een de userid 0 opgeslaan, maar er is uiteraard niemand met userid 0!
Op een andere restricted pagina kan je dan opvragen enkel je eigen berichten te tonen. Het script zoekt simpelweg alle berichten met extra id gelijk aan de session_id. Toen ik deze pagina bezocht, kreeg ik "user does not exists"... logisch, want het script vindt geen berichten die horen bij de ingelogde user.
Conclusie: ik leek ingelogd te zijn met id 0 en name Guest, die allebei niet bestaan en nooit bestaan hebben in de database...
Ik sta er zelf ook verstomd van...
was het op dat moment de 1e keer dat je de pagina bezocht sinds een half jaar? of had je even van tevoren de pagina al bezocht in een andere browser of iets dergelijks?
Het was de eerste keer in een half jaar dat ik die site bezocht. Ik bezocht hem NIET even daarvoor, ook niet met een andere browser...
Heb je niet nog een andere website op je server draaien waar je op ingelogd was?
Ik was op dat moment wel ingelogd op de MySql-Database...
Maar dat heb ik al 100x gedaan, terwijl ik nog nooit die "Guest" te zien kreeg.
Gewijzigd op 24/05/2011 11:10:45 door Sure Is
Naja... als die link niet meer live staat valt er ook niks te testen. We kunnen je nu dus niet verder helpen.
Inderdaad, je kunt het beter even online gooien maak een goede backup van je database etc. Er kan niks vernield worden.