Script helpen controleren
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
109
110
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
109
110
function loggedIn()
{
if (isset($_SESSION['id']))
{
return true;
}
else
{
return false;
}
}
function createAccount($gebruikersnaam, $wachtwoord, $emailadres, $admin, $ip, $datum)
{
global $settings;
global $link;
$createAccount = $link->query("INSERT INTO `leden` (`gebruikersnaam`, `wachtwoord`, `emailadres`, `ip`, `datum`) VALUES ('".$link->real_escape_string($gebruikersnaam)."', '".$link->real_escape_string(password_hash($wachtwoord, PASSWORD_DEFAULT))."', '".$link->real_escape_string($emailadres)."', '$ip', '".$link->real_escape_string($datum)."')");
if (!$createAccount)
{
return false;
}
else
{
if ($admin === 1)
{
$setUserToAdmin = $link->query("INSERT INTO `".$settings['prefix']."adminstratoren` (`gebruikersnaam`, `ip`) VALUES ('".$link->real_escape_string($gebruikersnaam)."', '$ip')");
if (!$setUserToAdmin)
{
return false;
}
else
{
return true;
}
}
else
{
return true;
}
}
}
function createLog($bericht, $plaats, $ip, $datum)
{
global $settings;
global $link;
$createLog = $link->query("INSERT INTO `".$settings['prefix']."logs` (`bericht`, `plaats`, `ip`, `datum`) VALUES ('".$link->real_escape_string($bericht)."', '".$link->real_escape_string($plaats)."', '$ip', '".$link->real_escape_string($datum)."')");
if (!$createLog)
{
return false;
}
else
{
return true;
}
}
function checkWrongAttempts($ip, $datum)
{
$searchForWrongAttempts = $link->query("FF SNEL");
if (!$searchForWrongAttempts)
{
return false;
}
else
{
return true;
}
}
function login(gebruikersnaam, $wachtwoord)
{
global $settings;
global $link;
global $ip;
global $datum;
$searchForUser = $link->query("SELECT * FROM `leden` WHERE `gebruikersnaam`='".$link->real_escape_string($gebruikersnaam)."'");
if($searchForUser)
{
$userDetails = $searchForUser->fetch_assoc();
if (
$searchForUser->num_rows === 1
&& password_verify($wachtwoord, $userDetails['wachtwoord'])
)
{
if (createLog($gebruikersnaam.' is met succes ingelogd', 'index', sha1($ip), $datum) === true)
{
$_SESSION['id'] = $userDetails['id'];
return true;
}
else
{
return false;
}
}
}
else
{
return false;
}
}
{
if (isset($_SESSION['id']))
{
return true;
}
else
{
return false;
}
}
function createAccount($gebruikersnaam, $wachtwoord, $emailadres, $admin, $ip, $datum)
{
global $settings;
global $link;
$createAccount = $link->query("INSERT INTO `leden` (`gebruikersnaam`, `wachtwoord`, `emailadres`, `ip`, `datum`) VALUES ('".$link->real_escape_string($gebruikersnaam)."', '".$link->real_escape_string(password_hash($wachtwoord, PASSWORD_DEFAULT))."', '".$link->real_escape_string($emailadres)."', '$ip', '".$link->real_escape_string($datum)."')");
if (!$createAccount)
{
return false;
}
else
{
if ($admin === 1)
{
$setUserToAdmin = $link->query("INSERT INTO `".$settings['prefix']."adminstratoren` (`gebruikersnaam`, `ip`) VALUES ('".$link->real_escape_string($gebruikersnaam)."', '$ip')");
if (!$setUserToAdmin)
{
return false;
}
else
{
return true;
}
}
else
{
return true;
}
}
}
function createLog($bericht, $plaats, $ip, $datum)
{
global $settings;
global $link;
$createLog = $link->query("INSERT INTO `".$settings['prefix']."logs` (`bericht`, `plaats`, `ip`, `datum`) VALUES ('".$link->real_escape_string($bericht)."', '".$link->real_escape_string($plaats)."', '$ip', '".$link->real_escape_string($datum)."')");
if (!$createLog)
{
return false;
}
else
{
return true;
}
}
function checkWrongAttempts($ip, $datum)
{
$searchForWrongAttempts = $link->query("FF SNEL");
if (!$searchForWrongAttempts)
{
return false;
}
else
{
return true;
}
}
function login(gebruikersnaam, $wachtwoord)
{
global $settings;
global $link;
global $ip;
global $datum;
$searchForUser = $link->query("SELECT * FROM `leden` WHERE `gebruikersnaam`='".$link->real_escape_string($gebruikersnaam)."'");
if($searchForUser)
{
$userDetails = $searchForUser->fetch_assoc();
if (
$searchForUser->num_rows === 1
&& password_verify($wachtwoord, $userDetails['wachtwoord'])
)
{
if (createLog($gebruikersnaam.' is met succes ingelogd', 'index', sha1($ip), $datum) === true)
{
$_SESSION['id'] = $userDetails['id'];
return true;
}
else
{
return false;
}
}
}
else
{
return false;
}
}
Ik heb nu dit, is dit dan al beter?
Ook heb ik in mijn eigen CMS de foutafhandeling op de query() functie ingebouwd in een extend van de MySQli-class. Het in één van de enkele oplossingen die kan doen om je code zo compact mogelijk te houden.
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
function createAccount($gebruikersnaam, $wachtwoord, $emailadres, $admin, $ip)
{
$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/init.php');
$datum = strtotime('Europe/Amsterdam');
$createAccount = $link->query("INSERT INTO `leden` (`gebruikersnaam`, `wachtwoord`, `emailadres`, `ip`, `datum`) VALUES ('".$link->real_escape_string($gebruikersnaam)."', '".$link->real_escape_string(password_hash($wachtwoord, PASSWORD_DEFAULT))."', '".$link->real_escape_string($emailadres)."', '$ip', '".$link->real_escape_string($datum)."')");
if (!$createAccount)
{
return false;
}
else
{
if ($admin === 1)
{
$setUserToAdmin = $link->query("INSERT INTO `".$settings['prefix']."adminstratoren` (`gebruikersnaam`, `ip`) VALUES ('".$link->real_escape_string($gebruikersnaam)."', '$ip')");
if (!$setUserToAdmin)
{
return false;
}
else
{
return true;
}
}
else
{
return true;
}
}
}
function createLog($bericht, $plaats, $ip)
{
$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/init.php');
$datum = strtotime('Europe/Amsterdam');
$createLog = $link->query("INSERT INTO `".$settings['prefix']."logs` (`bericht`, `plaats`, `ip`, `datum`) VALUES ('".$link->real_escape_string($bericht)."', '".$link->real_escape_string($plaats)."', '$ip', '".$link->real_escape_string($datum)."')");
if (!$createLog)
{
return false;
}
else
{
return true;
}
}
function checkWrongAttempts($ip, $plaats)
{
$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/init.php');
$datum = strtotime('Europe/Amsterdam');
$searchForWrongAttempts = $link->query("SELECT * FROM `".$settings['path']."foutepogingen` WHERE `ip`='$ip' AND `plaats`='".$link->real_escape_string($plaats)."' AND `datum` BETWEEN '$datum' AND '".strtotime('+15 minutes', $datum)."'");
if (
!$searchForWrongAttempts
|| $searchForWrongAttempts->num_rows === 0
)
{
return false;
}
else
{
if ($searchForWrongAttempts->num_rows > 3)
{
return true;
}
else
{
return false;
}
}
}
function insertWrongAttempt($ip, $plaats)
{
$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/init.php');
$datum = strtotime('Europe/Amsterdam');
}
function login($gebruikersnaam, $wachtwoord)
{
$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/init.php');
$datum = strtotime('Europe/Amsterdam');
global $ip;
if (checkWrongAttempts(sha1($ip), $datum, 'index') === false)
{
$searchForUser = $link->query("SELECT * FROM `leden` WHERE `gebruikersnaam`='".$link->real_escape_string($gebruikersnaam)."'");
if($searchForUser)
{
$userDetails = $searchForUser->fetch_assoc();
if (
$searchForUser->num_rows === 1
&& password_verify($wachtwoord, $userDetails['wachtwoord'])
)
{
if (createLog($gebruikersnaam.' is met succes ingelogd', 'index', sha1($ip)) === true)
{
$_SESSION['id'] = $userDetails['id'];
return true;
}
else
{
return false;
}
}
}
else
{
return false;
}
}
else
{
return false;
}
}
{
$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/init.php');
$datum = strtotime('Europe/Amsterdam');
$createAccount = $link->query("INSERT INTO `leden` (`gebruikersnaam`, `wachtwoord`, `emailadres`, `ip`, `datum`) VALUES ('".$link->real_escape_string($gebruikersnaam)."', '".$link->real_escape_string(password_hash($wachtwoord, PASSWORD_DEFAULT))."', '".$link->real_escape_string($emailadres)."', '$ip', '".$link->real_escape_string($datum)."')");
if (!$createAccount)
{
return false;
}
else
{
if ($admin === 1)
{
$setUserToAdmin = $link->query("INSERT INTO `".$settings['prefix']."adminstratoren` (`gebruikersnaam`, `ip`) VALUES ('".$link->real_escape_string($gebruikersnaam)."', '$ip')");
if (!$setUserToAdmin)
{
return false;
}
else
{
return true;
}
}
else
{
return true;
}
}
}
function createLog($bericht, $plaats, $ip)
{
$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/init.php');
$datum = strtotime('Europe/Amsterdam');
$createLog = $link->query("INSERT INTO `".$settings['prefix']."logs` (`bericht`, `plaats`, `ip`, `datum`) VALUES ('".$link->real_escape_string($bericht)."', '".$link->real_escape_string($plaats)."', '$ip', '".$link->real_escape_string($datum)."')");
if (!$createLog)
{
return false;
}
else
{
return true;
}
}
function checkWrongAttempts($ip, $plaats)
{
$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/init.php');
$datum = strtotime('Europe/Amsterdam');
$searchForWrongAttempts = $link->query("SELECT * FROM `".$settings['path']."foutepogingen` WHERE `ip`='$ip' AND `plaats`='".$link->real_escape_string($plaats)."' AND `datum` BETWEEN '$datum' AND '".strtotime('+15 minutes', $datum)."'");
if (
!$searchForWrongAttempts
|| $searchForWrongAttempts->num_rows === 0
)
{
return false;
}
else
{
if ($searchForWrongAttempts->num_rows > 3)
{
return true;
}
else
{
return false;
}
}
}
function insertWrongAttempt($ip, $plaats)
{
$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/init.php');
$datum = strtotime('Europe/Amsterdam');
}
function login($gebruikersnaam, $wachtwoord)
{
$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/init.php');
$datum = strtotime('Europe/Amsterdam');
global $ip;
if (checkWrongAttempts(sha1($ip), $datum, 'index') === false)
{
$searchForUser = $link->query("SELECT * FROM `leden` WHERE `gebruikersnaam`='".$link->real_escape_string($gebruikersnaam)."'");
if($searchForUser)
{
$userDetails = $searchForUser->fetch_assoc();
if (
$searchForUser->num_rows === 1
&& password_verify($wachtwoord, $userDetails['wachtwoord'])
)
{
if (createLog($gebruikersnaam.' is met succes ingelogd', 'index', sha1($ip)) === true)
{
$_SESSION['id'] = $userDetails['id'];
return true;
}
else
{
return false;
}
}
}
else
{
return false;
}
}
else
{
return false;
}
}
En nog steeds combineer je je ifs niet, de nesting is gewoon te veel.
Gewijzigd op 16/03/2017 16:46:18 door Ben van Velzen
Want als ik dat doe en ik doe:
date_default_timezone_set('Europe/Amsterdam');
werkt het dan nog oké?
Toevoeging op 16/03/2017 16:48:23:
"En nog steeds combineer je je ifs niet, de nesting is gewoon te veel." waar zou ik dan me ifs kunnen combineren?
Gewijzigd op 16/03/2017 16:47:03 door - Rob -
date_default_timezone_set() is de enige functie om de juiste tijdzone in te stellen. Maar doe dit bij voorkeur hogerop in php.ini. Tenzij je een afwijking wilt hebben op website-niveau. Of je moet op een buitenlands webhosting zitten. ;-)
Je kunt je if condities omdraaien, dan hoef je ook niet meer te nesten. Houd in het achterhoofd dat return de functie meteen stopt, dus dan heb je ook geen else condities meer nodig.
Bijvoorbeeld, in plaats van dit:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
if (
$searchForUser->num_rows === 1
&& password_verify($wachtwoord, $userDetails['wachtwoord'])
)
?>
if (
$searchForUser->num_rows === 1
&& password_verify($wachtwoord, $userDetails['wachtwoord'])
)
?>
Kun je dit doen:
Toevoeging op 16/03/2017 17:00:07:
Ben? Ik heb van dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
session_start();
date_default_timezone_set('Europe/Amsterdam');
$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/functions.php');
if (isset($_POST['gebruikersnaam'], $_POST['wachtwoord']) && loggedIn() === false)
{
if (login($_POST['gebruikersnaam'], $_POST['wachtwoord']) === true)
{
echo '1+Je bent met succes ingelogd';
}
else
{
echo '0+De ingevulde gegevens zijn niet goed';
}
}
?>
session_start();
date_default_timezone_set('Europe/Amsterdam');
$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/functions.php');
if (isset($_POST['gebruikersnaam'], $_POST['wachtwoord']) && loggedIn() === false)
{
if (login($_POST['gebruikersnaam'], $_POST['wachtwoord']) === true)
{
echo '1+Je bent met succes ingelogd';
}
else
{
echo '0+De ingevulde gegevens zijn niet goed';
}
}
?>
dit gemaakt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
session_start();
date_default_timezone_set('Europe/Amsterdam');
$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/functions.php');
if (
isset($_POST['gebruikersnaam'], $_POST['wachtwoord'])
&& loggedIn() === false
&& login($_POST['gebruikersnaam'], $_POST['wachtwoord']) === false
)
{
echo '0+De ingevulde gegevens zijn niet goed';
}
else
{
echo '1+Je bent met succes ingelogd';
}
?>
session_start();
date_default_timezone_set('Europe/Amsterdam');
$settings = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/../datafile.ini');
include($_SERVER['DOCUMENT_ROOT'].$settings['path'].'paneel/includes/functions.php');
if (
isset($_POST['gebruikersnaam'], $_POST['wachtwoord'])
&& loggedIn() === false
&& login($_POST['gebruikersnaam'], $_POST['wachtwoord']) === false
)
{
echo '0+De ingevulde gegevens zijn niet goed';
}
else
{
echo '1+Je bent met succes ingelogd';
}
?>
Dit is toch wat je bedoeld?
- Rob - op 16/03/2017 16:56:57:
Oké bedankt! Kan ik php.ini op mijn webhost gewoon aanpassen als ik die opzoek bij filezilla bv.?
Ligt aan de installatie op de webserver.
Kijk in phpinfo naar "Scan this dir for additional .ini files" of gebruik de php-flags in .htaccess.
Bekijk het voorbeeld nog eens.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
function loggedIn()
{
if (isset($_SESSION['id']))
{
return true;
}
else
{
return false;
}
}
{
if (isset($_SESSION['id']))
{
return true;
}
else
{
return false;
}
}
naar dit:
en dan dit toepassen:
Code (php)
1
2
3
4
5
2
3
4
5
if (loggedIn() != false)
{
header('Location: '.$settings['path'].'paneel/');
exit();
}
{
header('Location: '.$settings['path'].'paneel/');
exit();
}
Toevoeging op 16/03/2017 17:18:01:
En dan nog 1 laatste vraag, als ik password_hash() gebruik, is het dan nog nodig om deze te escapen met real_escape_string?
>> En dan nog 1 laatste vraag, als ik password_hash() gebruik, is het dan nog nodig om deze te escapen met real_escape_string?
Voor de consistentie: ja zeker.
Gewijzigd op 16/03/2017 17:27:38 door Ben van Velzen
Voor de consistentie: ja
Voor de beveiliging: nee