Sessie random kwijt
Het lijkt erop dat ik random de sessie in IE8 verlies.
Ik bouw het op de volgende manier op:
Nadat de info gecontroleerd is maak ik het volgende aan:
Code (php)
1
2
3
4
2
3
4
$_SESSION['id'] = $row['users_id'];
$_SESSION['email'] = stripslashes($row['email']);
$_SESSION['password'] = stripslashes($row['password']);
$_SESSION['logged_in'] = 'true';
$_SESSION['email'] = stripslashes($row['email']);
$_SESSION['password'] = stripslashes($row['password']);
$_SESSION['logged_in'] = 'true';
Inloggen
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
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
case "verification":
if($_SERVER['REQUEST_METHOD'] != 'POST'){
$error_no_form = 'true';
$error = 'true';
}
else{
// Omzetten naar variabelen
$email = $_POST['email'];
$password = $_POST['password'];
if(empty($email) || empty($password)){
$error_user_pass = 'true';
$error = 'true';
}
else{
// Database selecteren
$email = addslashes($email);
$password = addslashes(md5($password));
$remember_me = $_POST['rememberme'];
$hour = time()+60*60*24*365;
// Gegevens uit database ophalen.
$sql = "SELECT * FROM users WHERE email='" . $email . "' " . "AND password='" . $password . "' AND activated='1'";
$result = mysql_query($sql, $thecode) or die ('Kan gebruikersnaam niet controleren...<br />Misschien is er een probleem met de database...');
if (($row = mysql_fetch_array($result)) == 0){
$error_wrong_data = 'true';
$error = 'true';
}
else{
if($remember_me == '1'){
setcookie("email", $email, $hour);
setcookie("password", $password, $hour);
}
$_SESSION['id'] = $row['users_id'];
$_SESSION['email'] = stripslashes($row['email']);
$_SESSION['password'] = stripslashes($row['password']);
$_SESSION['logged_in'] = 'true';
$users_sql = "SELECT * FROM users WHERE email = '" . $_SESSION['email'] . "'";
$getUser = mysql_query($users_sql, $thecode) or die ('Cannot lookup content...<br />Maybe there is a problem with the database');
$rowUser = mysql_fetch_array($getUser);
$success = 'true';
$success_login = 'true';
}
}
}
break;
if($_SERVER['REQUEST_METHOD'] != 'POST'){
$error_no_form = 'true';
$error = 'true';
}
else{
// Omzetten naar variabelen
$email = $_POST['email'];
$password = $_POST['password'];
if(empty($email) || empty($password)){
$error_user_pass = 'true';
$error = 'true';
}
else{
// Database selecteren
$email = addslashes($email);
$password = addslashes(md5($password));
$remember_me = $_POST['rememberme'];
$hour = time()+60*60*24*365;
// Gegevens uit database ophalen.
$sql = "SELECT * FROM users WHERE email='" . $email . "' " . "AND password='" . $password . "' AND activated='1'";
$result = mysql_query($sql, $thecode) or die ('Kan gebruikersnaam niet controleren...<br />Misschien is er een probleem met de database...');
if (($row = mysql_fetch_array($result)) == 0){
$error_wrong_data = 'true';
$error = 'true';
}
else{
if($remember_me == '1'){
setcookie("email", $email, $hour);
setcookie("password", $password, $hour);
}
$_SESSION['id'] = $row['users_id'];
$_SESSION['email'] = stripslashes($row['email']);
$_SESSION['password'] = stripslashes($row['password']);
$_SESSION['logged_in'] = 'true';
$users_sql = "SELECT * FROM users WHERE email = '" . $_SESSION['email'] . "'";
$getUser = mysql_query($users_sql, $thecode) or die ('Cannot lookup content...<br />Maybe there is a problem with the database');
$rowUser = mysql_fetch_array($getUser);
$success = 'true';
$success_login = 'true';
}
}
}
break;
Edit pagina
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
switch (strtolower($_GET['edit'])){
case "info_pages":
$id = $_GET['id'];
$title = $_POST['title'];
$content = $_POST['content'];
// query maken
$sql = sprintf("UPDATE info_pages SET title='%s', content='%s' WHERE id='%s'",
mysql_real_escape_string($title),
mysql_real_escape_string($content),
mysql_real_escape_string($id)
);
// query uitvoeren
mysql_query($sql, $thecode) or die(mysql_error());
$success = 'true';
if($id == 1){
$success_edit_biography = 'true';
}
break;
}
case "info_pages":
$id = $_GET['id'];
$title = $_POST['title'];
$content = $_POST['content'];
// query maken
$sql = sprintf("UPDATE info_pages SET title='%s', content='%s' WHERE id='%s'",
mysql_real_escape_string($title),
mysql_real_escape_string($content),
mysql_real_escape_string($id)
);
// query uitvoeren
mysql_query($sql, $thecode) or die(mysql_error());
$success = 'true';
if($id == 1){
$success_edit_biography = 'true';
}
break;
}
Ik maak gebruik van een include app_top.php waar dit allemaal in staat. Als iemand het hele bestand wil inzien dan kan dit natuurlijk ook.
Overigens zal mn code misschien ook niet helemaal zuiver zijn, misschien iemand die de oorzaak weet waarom ik random uitgelogd wordt in IE en misschien ook iemand die even feedback wil geven op de code? Hoe erg is het ermee gesteld? Ben geen ervaren programmeer maar wil graag leren.
Gewijzigd op 10/01/2011 16:12:29 door Pong Zor
wss moet je nog zoeist als dit erbij doen]
Op de pagina waar je kan bewerken controleer ik het zo:
Code (php)
1
2
3
4
5
2
3
4
5
if($_SESSION['logged_in'] == 'true' && $rowUser['users_group'] == 'Beheerder'){
echo 'ingelogd';
}else{
echo 'inloggen';
}
echo 'ingelogd';
}else{
echo 'inloggen';
}
Soms als ik iets bewerkt heb en ik ga weer naar die bewerk pagina krijg ik dus de melding inloggen terwijl ik al ingelogd ben of was. Wat me opvalt is dat de array ook opeens leeg is.
Het gaat om deze array:
Code (php)
1
Array ( [id] => 9 [email] => [email protected] [password] => 2f76b39ssssss9779be8d9fa6bed403 [logged_in] => true )
Opeens is die zomaar leeg naar een paar keer bewerkt te hebben.
Gewijzigd op 10/01/2011 16:17:59 door Pong Zor
Andere foutjes:
- Zorg voor goede fout afhandeling. die() is niet mooi.
- addslashes is niet bedoeld om sql injection tegen te gaan. Daar hebben we mysql_real_escape_string voor.
- dingen als $email = $_POST['email']; zijn nergens voor nodig.
- Ik zie geen enkel commentaar in je script.
Er zal nog wel meer te vinden zijn maar het is wat lastig lezen zo.
neem aan dat je op iedere pagina ook session_start(); hebt?
waarom doe je elke keer een session_regenerate_id? Dat doe je normaal gesproken naar het inloggen. Nu heb je kans dat er requesten door elkaar gaan lopen waardoor je het verkeerde sessie id gebruikt.
Ik heb inderdaad op elke pagina de session_start(); deze wordt overal geïnclude.
@ mark, hoe kan ik die DIE beter oplossen?
Ik deed juist:
Zodat je geen ' en " om je injectie te voorkomen.
Maar moet ik dan $email = mysql_real_escape_string($email) doen?
Gewijzigd op 10/01/2011 16:25:03 door Pong Zor
en ja gewoon mysql_real_escape_string gebruiken.
Gewijzigd op 10/01/2011 16:26:50 door Teun Hesseling
@ TJVB Je moet dus niet op elke pagina die sessie id generaten maar gewoon 1 keer na het inloggen.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
//rest
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
//rest
?>
http://www.phptuts.nl/view/41/7/
Ik gebruik mysql_real_escape_string meestal pas zo laat mogelijk en meestal in de query zelf. Dan hoef je ook geen extra variabelen aan te maken.
kijk een op Ik gebruik mysql_real_escape_string meestal pas zo laat mogelijk en meestal in de query zelf. Dan hoef je ook geen extra variabelen aan te maken.
Ik deed juist addslashes om ervoor te zorgen dat iemand met een wachtwoord ' niet voor injectie kan zorgen
Ja maar daar is addslashes niet voor, daar is mysql_real_escape_string voor.
oke maar dan het volgende:
Op deze manier laat ik iemand registreren:
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
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
case "register":
if($_SERVER['REQUEST_METHOD'] != 'POST'){
$error_no_form = 'true';
$error = 'true';
}
else{
// Omzetten naar variabelen
$email = $_POST['email'];
$password = $_POST['password'];
$password_confirm = $_POST['password_confirm'];
$ip = $_SERVER['REMOTE_ADDR'];
if(empty($email) || empty($password) || empty($password_confirm)){
$error_user_pass = 'true';
$error = 'true';
}
else if($password != $password_confirm){
$error_pass = 'true';
$error = 'true';
}
else{
// Gegevens uit database ophalen.
$sql = "SELECT * FROM users WHERE email='" . $email . "'";
$result = mysql_query($sql, $thecode) or die ('Kan gebruikersnaam niet controleren...<br />Misschien is er een probleem met de database...');
if (($row = mysql_fetch_array($result)) != 0){
$error_already_exists = 'true';
$error = 'true';
}
else{
$sql = sprintf("INSERT INTO users SET email='%s', password='%s', ip='%s', activated='0'",
mysql_real_escape_string($email),
mysql_real_escape_string($password),
mysql_real_escape_string($ip),
mysql_real_escape_string($activated)
);
mysql_query($sql, $thecode) or die(mysql_error());
$success = 'true';
$success_register = 'true';
$to = $email;
$subject = 'Account activatie xLiberty.nl';
// naam site
$website_naam = 'xLiberty.nl';
// eigen mail
$eigen_emailadres = '[email protected]';
// error mail
$error_emailadres = '[email protected]';
// HTML mail? True/False
$html = true;
// De headers samenstellen
$headers = 'From: ' . $website_naam . ' <' . $eigen_emailadres . '>' . PHP_EOL;
$headers .= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . PHP_EOL;
$headers .= 'X-Mailer: PHP/' . phpversion() . PHP_EOL;
$headers .= 'X-Priority: Normal' . PHP_EOL;
$headers .= ($html) ? 'MIME-Version: 1.0' . PHP_EOL : '';
$headers .= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . PHP_EOL : '';
// message
$message = '<html><body>';
$message .= '<p>Beste bezoeker,</p>';
$message .= '<p>Bedankt voor het registeren op de xLiberty.nl site.</p>';
$message .= '<p>Hieronder vindt u uw account informatie. Klik op de link om uw account te activeren.</p>';
$message .= '<table style="border: 1px solid #666;" cellpadding="0" cellspacing="10">';
$message .= "<tr><td width='250'><strong>Gebruikersnaam: </strong> </td><td>" . $email . "</td></tr>";
$message .= "<tr><td><strong>Wachtwoord: </strong> </td><td>" . $_POST['password'] . "</td></tr>";
$message .= "<tr><td><strong>Activatielink:</strong> </td><td><a href='http://www.xliberty.nl/site/index.php?do=activate&email=" . $email . "'>http://www.xliberty.nl/site/index.php?do=activate&email=" . $email . "</a></td></tr>";
$message .= "</table>";
$message .= "<br />";
$message .= "<p>Met vriendelijke groet, <br />xLiberty.nl</p>";
$message .= "</body></html>";
// Mail it
mail($to, $subject, $message, $headers);
}
}
}
break;
if($_SERVER['REQUEST_METHOD'] != 'POST'){
$error_no_form = 'true';
$error = 'true';
}
else{
// Omzetten naar variabelen
$email = $_POST['email'];
$password = $_POST['password'];
$password_confirm = $_POST['password_confirm'];
$ip = $_SERVER['REMOTE_ADDR'];
if(empty($email) || empty($password) || empty($password_confirm)){
$error_user_pass = 'true';
$error = 'true';
}
else if($password != $password_confirm){
$error_pass = 'true';
$error = 'true';
}
else{
// Gegevens uit database ophalen.
$sql = "SELECT * FROM users WHERE email='" . $email . "'";
$result = mysql_query($sql, $thecode) or die ('Kan gebruikersnaam niet controleren...<br />Misschien is er een probleem met de database...');
if (($row = mysql_fetch_array($result)) != 0){
$error_already_exists = 'true';
$error = 'true';
}
else{
$sql = sprintf("INSERT INTO users SET email='%s', password='%s', ip='%s', activated='0'",
mysql_real_escape_string($email),
mysql_real_escape_string($password),
mysql_real_escape_string($ip),
mysql_real_escape_string($activated)
);
mysql_query($sql, $thecode) or die(mysql_error());
$success = 'true';
$success_register = 'true';
$to = $email;
$subject = 'Account activatie xLiberty.nl';
// naam site
$website_naam = 'xLiberty.nl';
// eigen mail
$eigen_emailadres = '[email protected]';
// error mail
$error_emailadres = '[email protected]';
// HTML mail? True/False
$html = true;
// De headers samenstellen
$headers = 'From: ' . $website_naam . ' <' . $eigen_emailadres . '>' . PHP_EOL;
$headers .= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . PHP_EOL;
$headers .= 'X-Mailer: PHP/' . phpversion() . PHP_EOL;
$headers .= 'X-Priority: Normal' . PHP_EOL;
$headers .= ($html) ? 'MIME-Version: 1.0' . PHP_EOL : '';
$headers .= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . PHP_EOL : '';
// message
$message = '<html><body>';
$message .= '<p>Beste bezoeker,</p>';
$message .= '<p>Bedankt voor het registeren op de xLiberty.nl site.</p>';
$message .= '<p>Hieronder vindt u uw account informatie. Klik op de link om uw account te activeren.</p>';
$message .= '<table style="border: 1px solid #666;" cellpadding="0" cellspacing="10">';
$message .= "<tr><td width='250'><strong>Gebruikersnaam: </strong> </td><td>" . $email . "</td></tr>";
$message .= "<tr><td><strong>Wachtwoord: </strong> </td><td>" . $_POST['password'] . "</td></tr>";
$message .= "<tr><td><strong>Activatielink:</strong> </td><td><a href='http://www.xliberty.nl/site/index.php?do=activate&email=" . $email . "'>http://www.xliberty.nl/site/index.php?do=activate&email=" . $email . "</a></td></tr>";
$message .= "</table>";
$message .= "<br />";
$message .= "<p>Met vriendelijke groet, <br />xLiberty.nl</p>";
$message .= "</body></html>";
// Mail it
mail($to, $subject, $message, $headers);
}
}
}
break;
Op deze manier laat ik iemand inloggen:
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
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
case "verification":
if($_SERVER['REQUEST_METHOD'] != 'POST'){
$error_no_form = 'true';
$error = 'true';
}
else{
// Omzetten naar variabelen
$email = $_POST['email'];
$password = $_POST['password'];
if(empty($email) || empty($password)){
$error_user_pass = 'true';
$error = 'true';
}
else{
// Database selecteren
$email = addslashes($email);
$password = addslashes(md5($password));
$remember_me = $_POST['rememberme'];
$hour = time()+60*60*24*365;
// Gegevens uit database ophalen.
$sql = "SELECT * FROM users WHERE email='" . $email . "' " . "AND password='" . $password . "' AND activated='1'";
$result = mysql_query($sql, $thecode) or die ('Kan gebruikersnaam niet controleren...<br />Misschien is er een probleem met de database...');
if (($row = mysql_fetch_array($result)) == 0){
$error_wrong_data = 'true';
$error = 'true';
}
else{
if($remember_me == '1'){
setcookie("email", $email, $hour);
setcookie("password", $password, $hour);
}
$_SESSION['id'] = $row['users_id'];
$_SESSION['email'] = stripslashes($row['email']);
$_SESSION['password'] = stripslashes($row['password']);
$_SESSION['logged_in'] = 'true';
$users_sql = "SELECT * FROM users WHERE email = '" . $_SESSION['email'] . "'";
$getUser = mysql_query($users_sql, $thecode) or die ('Cannot lookup content...<br />Maybe there is a problem with the database');
$rowUser = mysql_fetch_array($getUser);
$success = 'true';
$success_login = 'true';
}
}
}
break;
if($_SERVER['REQUEST_METHOD'] != 'POST'){
$error_no_form = 'true';
$error = 'true';
}
else{
// Omzetten naar variabelen
$email = $_POST['email'];
$password = $_POST['password'];
if(empty($email) || empty($password)){
$error_user_pass = 'true';
$error = 'true';
}
else{
// Database selecteren
$email = addslashes($email);
$password = addslashes(md5($password));
$remember_me = $_POST['rememberme'];
$hour = time()+60*60*24*365;
// Gegevens uit database ophalen.
$sql = "SELECT * FROM users WHERE email='" . $email . "' " . "AND password='" . $password . "' AND activated='1'";
$result = mysql_query($sql, $thecode) or die ('Kan gebruikersnaam niet controleren...<br />Misschien is er een probleem met de database...');
if (($row = mysql_fetch_array($result)) == 0){
$error_wrong_data = 'true';
$error = 'true';
}
else{
if($remember_me == '1'){
setcookie("email", $email, $hour);
setcookie("password", $password, $hour);
}
$_SESSION['id'] = $row['users_id'];
$_SESSION['email'] = stripslashes($row['email']);
$_SESSION['password'] = stripslashes($row['password']);
$_SESSION['logged_in'] = 'true';
$users_sql = "SELECT * FROM users WHERE email = '" . $_SESSION['email'] . "'";
$getUser = mysql_query($users_sql, $thecode) or die ('Cannot lookup content...<br />Maybe there is a problem with the database');
$rowUser = mysql_fetch_array($getUser);
$success = 'true';
$success_login = 'true';
}
}
}
break;
Hoe laat ik controleren om injectie zonder die addslashes met real_escape_string?
Toevoeging op 10/01/2011 16:38:23:
Overigens krijg ik deze melding als ik de errors aanzet
Code (php)
1
2
3
2
3
Notice: Undefined index: edit in /customers/xliberty.nl/xliberty.nl/httpd.www/site/thecode/includes/application_top.php on line 34
Notice: Undefined index: do in /customers/xliberty.nl/xliberty.nl/httpd.www/site/thecode/includes/application_top.php on line 61
Notice: Undefined index: do in /customers/xliberty.nl/xliberty.nl/httpd.www/site/thecode/includes/application_top.php on line 61
En dat gaat dan hierom:
Gewijzigd op 10/01/2011 16:35:51 door Pong Zor
Code (php)
1
2
3
2
3
<?php
$voorbeeld = mysql_query("SELECT * FROM voorbeeld WHERE id = '".mysql_real_escape_string($_GET['id'])."'");
?>
$voorbeeld = mysql_query("SELECT * FROM voorbeeld WHERE id = '".mysql_real_escape_string($_GET['id'])."'");
?>
if (($row = mysql_fetch_array($result)) != 0){
Code (php)
1
2
3
4
2
3
4
if (($row = mysql_fetch_array($result)) == 0){
$error_wrong_data = 'true';
$error = 'true';
}
$error_wrong_data = 'true';
$error = 'true';
}
Daarmee controleer ik de query, als er geen resultaat is dan bestaat of de e-mail niet of het account is al geactiveerd (activate = 1)
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
if(mysql_num_rows($result) > 0){
$ja = mysql_fetch_assoc($result);
if($ja['activate'] == 0){
//rest van je code
}
}
?>
if(mysql_num_rows($result) > 0){
$ja = mysql_fetch_assoc($result);
if($ja['activate'] == 0){
//rest van je code
}
}
?>
dit is een betere manier... denk ik
Gewijzigd op 10/01/2011 16:46:33 door Teun Hesseling
Dennis Kallansee op 10/01/2011 16:42:33:
Maar hoe kom je er bij dat dit: $row = mysql_fetch_array($result) nul kan zijn?
waarschijnlijk ooit eens uit een brakke dreamweaver tutorial gekopieerd
($row = mysql_fetch_array($result)) zal nooit een getal opleveren. Dus daar hoef je ook niet op te controleren.