Niet hoofdletter gevoelig
Hallo,
Ik ben bezig met een inlog systeem, als je je registreerd en je gebruikersnaam is Pietje10 zet hij dus Pietje10 in de database. Als je dan wilt inloggen en je doet pietje10 pakt hij hem niet, hoe kan ik dit (makkelijk) regelen. Ik doe nu als je hem in de database zet met strtolower() en als je wilt inloggen ook gewoon eerst strtolower() maar misschien is er een makkelijker/netter manier?!
bvd
Ik ben bezig met een inlog systeem, als je je registreerd en je gebruikersnaam is Pietje10 zet hij dus Pietje10 in de database. Als je dan wilt inloggen en je doet pietje10 pakt hij hem niet, hoe kan ik dit (makkelijk) regelen. Ik doe nu als je hem in de database zet met strtolower() en als je wilt inloggen ook gewoon eerst strtolower() maar misschien is er een makkelijker/netter manier?!
bvd
Is prima methode.
Je kan de charset voor die kolom aanpassen zodat die case-insensitive vergelijkt. Gewoon dezelfde charset als nu gebruiken, maar dan met _ci aan het eind.
Ik heb de gebruikersnaam kolom op latin1_swedish_ci gezet, maar als ik wil inloggen en ik doe de hoofdletters anders zoals de gebruikersnaam in de db staat geeft hij nog steeds aan "Gebruikersnaam en/of wachtwoord onjuist." weet iemand wat er niet goed aan is?
bvd
bvd
misschien relevante code?
want als het niet aan de database ligt, ligt het aan je code;)
want als het niet aan de database ligt, ligt het aan je code;)
Natuurlijk!
En de Collatie van gebruikersnaam is latin1_swedish_ci
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
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
<?php
/**
* @author 053Timo
* @copyright 2011
*/
session_start(); //We maken gebruik van sessies
# errors weergeven
ini_set('display_errors',0); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',false); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
$con = mysql_connect("xxx","xxx","xxx"); // Verbinding met de database maken
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("leden", $con);
$result = mysql_query("SELECT * FROM leden
WHERE gebruikersnaam='" . $_POST['gebruikersnaam'] . "'");
$row = mysql_fetch_array($result);
if ($_SESSION['ingelogd'] == true)
{
header('Refresh: 3; url=beveiligd.php');
echo "Je bent al ingelogd met gebruikersnaam: " . mysql_real_escape_string($_SESSION['gebruikersnaam']) . ", je wordt nu doorgestuurd.";
}
else
{
echo'
<html>
<head>
<title>Login</title>
<link href="style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<h1>Login</h1>
<p>Login met uw gegevens.</p>
<form action="" method="post">
<table>
<tr><td>Gebruikersnaam: </td><td><input type="text" name="gebruikersnaam"/></td></tr>
<tr><td>Wachtwoord: </td><td><input type="password" name="wachtwoord"/></td></tr>
<tr><td><input type="submit" value="Login"/></td></tr>
</table>
</form>
<table width="35%">
<tr><td><a href="registreer.php">Registreren</a></td><td><a href="wachtwoordvergeten.php">Wachtwoord vergeten</a></td></tr>
</table>
</body>
</html>
';
}
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (isset($_POST['gebruikersnaam'], $_POST['wachtwoord']))
{
if ($_POST['gebruikersnaam'] == $row['gebruikersnaam'] && $_POST['wachtwoord'] == $row['wachtwoord']) //is de gebruikersnaam en wachtwoord goed ingevuld (uitlezen van database)
{
$_SESSION['ingelogd'] = true;
$_SESSION['gebruikersnaam'] = $row['gebruikersnaam'];
$_SESSION['rang'] = $row['rang'];
header('Refresh: 3; url=beveiligd.php');
echo "Je bent succesvol ingelogd, je wordt nu doorgestuurd.";
}
else
{
echo "De gebruikersnaam en/of wachtwoord is niet juist ingevuld.";
}
}
}
?>
/**
* @author 053Timo
* @copyright 2011
*/
session_start(); //We maken gebruik van sessies
# errors weergeven
ini_set('display_errors',0); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',false); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
$con = mysql_connect("xxx","xxx","xxx"); // Verbinding met de database maken
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("leden", $con);
$result = mysql_query("SELECT * FROM leden
WHERE gebruikersnaam='" . $_POST['gebruikersnaam'] . "'");
$row = mysql_fetch_array($result);
if ($_SESSION['ingelogd'] == true)
{
header('Refresh: 3; url=beveiligd.php');
echo "Je bent al ingelogd met gebruikersnaam: " . mysql_real_escape_string($_SESSION['gebruikersnaam']) . ", je wordt nu doorgestuurd.";
}
else
{
echo'
<html>
<head>
<title>Login</title>
<link href="style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<h1>Login</h1>
<p>Login met uw gegevens.</p>
<form action="" method="post">
<table>
<tr><td>Gebruikersnaam: </td><td><input type="text" name="gebruikersnaam"/></td></tr>
<tr><td>Wachtwoord: </td><td><input type="password" name="wachtwoord"/></td></tr>
<tr><td><input type="submit" value="Login"/></td></tr>
</table>
</form>
<table width="35%">
<tr><td><a href="registreer.php">Registreren</a></td><td><a href="wachtwoordvergeten.php">Wachtwoord vergeten</a></td></tr>
</table>
</body>
</html>
';
}
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (isset($_POST['gebruikersnaam'], $_POST['wachtwoord']))
{
if ($_POST['gebruikersnaam'] == $row['gebruikersnaam'] && $_POST['wachtwoord'] == $row['wachtwoord']) //is de gebruikersnaam en wachtwoord goed ingevuld (uitlezen van database)
{
$_SESSION['ingelogd'] = true;
$_SESSION['gebruikersnaam'] = $row['gebruikersnaam'];
$_SESSION['rang'] = $row['rang'];
header('Refresh: 3; url=beveiligd.php');
echo "Je bent succesvol ingelogd, je wordt nu doorgestuurd.";
}
else
{
echo "De gebruikersnaam en/of wachtwoord is niet juist ingevuld.";
}
}
}
?>
En de Collatie van gebruikersnaam is latin1_swedish_ci
okee eerst even over je code
* geen wildcard in SQL
* mysql_real_escape_string gebruiken
* geen or die();
* mysql_fetch_assoc is sneller
* gebruikers geen mysql_error geven
* geen gebruikersnaam in SESSION zetten
* beter beveiligen, iedereen kan nu ingelogd op true zetten
* wachtwoord beveiligen met sha1()
* form niet in een table zetten
voorderest is strtolower een goede manier.
* geen wildcard in SQL
* mysql_real_escape_string gebruiken
* geen or die();
* mysql_fetch_assoc is sneller
* gebruikers geen mysql_error geven
* geen gebruikersnaam in SESSION zetten
* beter beveiligen, iedereen kan nu ingelogd op true zetten
* wachtwoord beveiligen met sha1()
* form niet in een table zetten
voorderest is strtolower een goede manier.
Gewijzigd op 06/05/2011 21:12:44 door Victor -
Ja, bedankt voor je hulp! Ik ben nog niet heel ver met het script. In eerste instantie gaat het er om dat het niet uitmaakt als je inlogt qua hoofdletters.
Wat bedoel je eigenlijk met WILDCARD?
Wat bedoel je eigenlijk met WILDCARD?
Gewijzigd op 06/05/2011 21:14:54 door Timo Kleinhout
Gebruik geen SELECT *
Gebruik geen strtolower maar MySQL functions als LOWER() of UPPER()
Gebruik geen strtolower maar MySQL functions als LOWER() of UPPER()
het gaat om wel of geen hoofdletters, maar als je script lek is dan is het nog niet handig, kan je net zo goed geen login maken, scheelt de bezoeker een hoop ellende.
wildcard = *
je kan beter SELECT naam, email, id, wachtwoord FROM members WHERE naam= naam
dan SELECT * anders heb je nog steeds SQL_INJECTION
wildcard = *
je kan beter SELECT naam, email, id, wachtwoord FROM members WHERE naam= naam
dan SELECT * anders heb je nog steeds SQL_INJECTION
Oke, bedankt! Dit maakt het een hoop duidelijker ;-)
Toevoeging op 07/05/2011 13:04:40:
Ik heb een aantal punten die je aangaf verbeterd, maar als je de gebruikersnaam niet in een Session mag zetten, hoe kun je die later dan weer terug halen? en hoe kan ik het beter beveiligen zodat anderen de sessie ingelogd niet zelf op true kunnen zetten?
Toevoeging op 07/05/2011 13:04:40:
Ik heb een aantal punten die je aangaf verbeterd, maar als je de gebruikersnaam niet in een Session mag zetten, hoe kun je die later dan weer terug halen? en hoe kan ik het beter beveiligen zodat anderen de sessie ingelogd niet zelf op true kunnen zetten?
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
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
<?php
session_start(); //We maken gebruik van sessies
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit
$con = mysql_connect("localhost","xxx","xxx"); // Verbinding met de database maken
$select = mysql_select_db("leden", $con);
$result = mysql_query("SELECT gebruikersnaam, wachtwoord, email, rang FROM leden
WHERE gebruikersnaam='" . mysql_real_escape_string($_POST['gebruikersnaam']) . "'");
$row = mysql_fetch_assoc($result);
if (!$con || !$select) {
echo '<b>Er kan momenteel geen verbinding worden gemaakt met de database. Er is al contact opgenomen met de webmaster.</b>';
mail('[email protected]', 'Mysql Error', 'Er kan momenteel geen verbinding worden gemaakt met de database.');
}
// SQL Function
function sql_query($query) {
$mysql = mysql_query($query);
if ($mysql) {
return $mysql;
} else {
echo '<b>Fout in de database bij het uitvoeren van een query!</b>';
mail('[email protected]', 'Mysql Error', 'Fout in de database bij het uitvoeren van: ' . $query . '');
}
}
if ($_SESSION['ingelogd'] == true)
{
header('Refresh: 3; url=beveiligd.php');
echo "Je bent al ingelogd met gebruikersnaam: " . $_SESSION['gebruikersnaam'] . ", je wordt nu doorgestuurd.";
}
else
{
echo'
<html>
<head>
<title>Login</title>
<link href="style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<h1>Login</h1>
<p>Login met uw gegevens.</p>
<form action="" method="post">
<table>
<tr><td>Gebruikersnaam: </td><td><input type="text" name="gebruikersnaam"/></td></tr>
<tr><td>Wachtwoord: </td><td><input type="password" name="wachtwoord"/></td></tr>
<tr><td><input type="submit" value="Login"/></td></tr>
</table>
</form>
<table width="35%">
<tr><td><a href="registreer.php">Registreren</a></td><td><a href="wachtwoordvergeten.php">Wachtwoord vergeten</a></td></tr>
</table>
</body>
</html>
';
}
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (isset($_POST['gebruikersnaam'], $_POST['wachtwoord']))
{
if ($_POST['gebruikersnaam'] == $row['gebruikersnaam'] && sha1($_POST['wachtwoord']) == $row['wachtwoord']) //is de gebruikersnaam en wachtwoord goed ingevuld (uitlezen van database)
{
$_SESSION['ingelogd'] = true;
$_SESSION['gebruikersnaam'] = $row['gebruikersnaam'];
$_SESSION['rang'] = $row['rang'];
header('Refresh: 3; url=beveiligd.php');
echo "Je bent succesvol ingelogd, je wordt nu doorgestuurd.";
}
else
{
echo "De gebruikersnaam en/of wachtwoord is niet juist ingevuld.";
}
}
}
?>
session_start(); //We maken gebruik van sessies
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit
$con = mysql_connect("localhost","xxx","xxx"); // Verbinding met de database maken
$select = mysql_select_db("leden", $con);
$result = mysql_query("SELECT gebruikersnaam, wachtwoord, email, rang FROM leden
WHERE gebruikersnaam='" . mysql_real_escape_string($_POST['gebruikersnaam']) . "'");
$row = mysql_fetch_assoc($result);
if (!$con || !$select) {
echo '<b>Er kan momenteel geen verbinding worden gemaakt met de database. Er is al contact opgenomen met de webmaster.</b>';
mail('[email protected]', 'Mysql Error', 'Er kan momenteel geen verbinding worden gemaakt met de database.');
}
// SQL Function
function sql_query($query) {
$mysql = mysql_query($query);
if ($mysql) {
return $mysql;
} else {
echo '<b>Fout in de database bij het uitvoeren van een query!</b>';
mail('[email protected]', 'Mysql Error', 'Fout in de database bij het uitvoeren van: ' . $query . '');
}
}
if ($_SESSION['ingelogd'] == true)
{
header('Refresh: 3; url=beveiligd.php');
echo "Je bent al ingelogd met gebruikersnaam: " . $_SESSION['gebruikersnaam'] . ", je wordt nu doorgestuurd.";
}
else
{
echo'
<html>
<head>
<title>Login</title>
<link href="style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<h1>Login</h1>
<p>Login met uw gegevens.</p>
<form action="" method="post">
<table>
<tr><td>Gebruikersnaam: </td><td><input type="text" name="gebruikersnaam"/></td></tr>
<tr><td>Wachtwoord: </td><td><input type="password" name="wachtwoord"/></td></tr>
<tr><td><input type="submit" value="Login"/></td></tr>
</table>
</form>
<table width="35%">
<tr><td><a href="registreer.php">Registreren</a></td><td><a href="wachtwoordvergeten.php">Wachtwoord vergeten</a></td></tr>
</table>
</body>
</html>
';
}
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (isset($_POST['gebruikersnaam'], $_POST['wachtwoord']))
{
if ($_POST['gebruikersnaam'] == $row['gebruikersnaam'] && sha1($_POST['wachtwoord']) == $row['wachtwoord']) //is de gebruikersnaam en wachtwoord goed ingevuld (uitlezen van database)
{
$_SESSION['ingelogd'] = true;
$_SESSION['gebruikersnaam'] = $row['gebruikersnaam'];
$_SESSION['rang'] = $row['rang'];
header('Refresh: 3; url=beveiligd.php');
echo "Je bent succesvol ingelogd, je wordt nu doorgestuurd.";
}
else
{
echo "De gebruikersnaam en/of wachtwoord is niet juist ingevuld.";
}
}
}
?>
Gewijzigd op 07/05/2011 13:01:43 door Timo Kleinhout
De gebruikersnaam kun je krijgen door WHERE id="$id"




