Inlogscript check vanuit cookie
Ik heb een simpel systeem die checkt of een cookie bestaat. Zoja dan word die al ingelogd, zo nee dan moet er eerst ingelogd worden.
Nu wil ik dat er ook gecheckt word vanuit de database of het wachtwoord nog overeen komt met die uit de cookie (Beide md5). Alleen krijg ik het niet voor elkaar.
Wie kan mij helpen? Zoals je vast aan het script kunt zien ben ik beginnend en ben ik op deze manier alles aan het testen wat de mogelijkheden zijn :).
De cookie Magazijnapp3 moet overeenkomen met het wachtwoord uit DB_users onder password. De username kan uit de cookie gehaald worden..
Alvast bedankt! :)
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
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
<?
if (isset($_COOKIE['Magazijnapp'])) {
// Store data in session variables
session_start();
$_SESSION["loggedin"] = true;
$_SESSION["id"] = $_COOKIE['Magazijnapp'];
$_SESSION["username"] = $_COOKIE['Magazijnapp2'];
$_SESSION["password"] = $_COOKIE['Magazijnapp3'];
$idcookie = $_COOKIE['Magazijnapp'];
$passwordcookie = $_COOKIE['Magazijnapp3'];
$id2 = $_GET['url'];
} else {
session_start();
$id = $_GET['DB_id'];
// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
header("location: login.php?url=$websiteurl/index.php");
exit;
}
}
?>
if (isset($_COOKIE['Magazijnapp'])) {
// Store data in session variables
session_start();
$_SESSION["loggedin"] = true;
$_SESSION["id"] = $_COOKIE['Magazijnapp'];
$_SESSION["username"] = $_COOKIE['Magazijnapp2'];
$_SESSION["password"] = $_COOKIE['Magazijnapp3'];
$idcookie = $_COOKIE['Magazijnapp'];
$passwordcookie = $_COOKIE['Magazijnapp3'];
$id2 = $_GET['url'];
} else {
session_start();
$id = $_GET['DB_id'];
// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
header("location: login.php?url=$websiteurl/index.php");
exit;
}
}
?>
- Met welke reden sla je een wachtwoord op in een sessie? Dat lijkt mij nergens voor nodig. Het wachtwoord gebruik je enkel bij het inloggen, en daarna niet meer.
- md5() voor het hashen van een wachtwoord wordt al jaren lang afgeraden vanwege veiligheid. Gebruik liever password_hash() en verify_password().
Weet jij dan wel een manier hoe ik kan checken of een password overeenkomt met een password uit een cookie? Gewoon uit nieuwsgierigheid.
Ik had bijv wel onderstaande maar krijg het niet werkend.
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
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
<?
$usercookie = $_COOKIE['Magazijnapp2'];
$passwordcookie = $_COOKIE['Magazijnapp3'];
if (isset($_COOKIE['Magazijnapp'])) {
$sql = mysqli_query($conn, "SELECT * FROM users WHERE `username`='" . $usercookie . "'");
while($print_data = mysqli_fetch_array($sql)){
if ($print_data["password"] == "$passwordcookie")
// Store data in session variables
session_start();
$_SESSION["loggedin"] = true;
$_SESSION["id"] = $_COOKIE['Magazijnapp'];
$_SESSION["username"] = $_COOKIE['Magazijnapp2'];
$_SESSION["password"] = $_COOKIE['Magazijnapp3'];
$idcookie = $_COOKIE['Magazijnapp'];
$passwordcookie = $_COOKIE['Magazijnapp3'];
$id2 = $_GET['url'];
} else {
session_start();
$id = $_GET['DB_id'];
// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
header("location: login.php?url=$websiteurl/index.php");
exit;
}
}
else
session_start();
$id = $_GET['DB_id'];
// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
header("location: login.php?url=$websiteurl/index.php");
exit;
}
}
?>
$usercookie = $_COOKIE['Magazijnapp2'];
$passwordcookie = $_COOKIE['Magazijnapp3'];
if (isset($_COOKIE['Magazijnapp'])) {
$sql = mysqli_query($conn, "SELECT * FROM users WHERE `username`='" . $usercookie . "'");
while($print_data = mysqli_fetch_array($sql)){
if ($print_data["password"] == "$passwordcookie")
// Store data in session variables
session_start();
$_SESSION["loggedin"] = true;
$_SESSION["id"] = $_COOKIE['Magazijnapp'];
$_SESSION["username"] = $_COOKIE['Magazijnapp2'];
$_SESSION["password"] = $_COOKIE['Magazijnapp3'];
$idcookie = $_COOKIE['Magazijnapp'];
$passwordcookie = $_COOKIE['Magazijnapp3'];
$id2 = $_GET['url'];
} else {
session_start();
$id = $_GET['DB_id'];
// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
header("location: login.php?url=$websiteurl/index.php");
exit;
}
}
else
session_start();
$id = $_GET['DB_id'];
// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
header("location: login.php?url=$websiteurl/index.php");
exit;
}
}
?>
Ik moet er niet aan denken als iemand met een beetje XSS (Cross Site Scripting) mijn wachtwoord erop zou opduiken.
Je gebruikt je wachtwoord enkel bij het inloggen, en controleert deze alleen met wat er in de database staat.
Gewijzigd op 13/08/2022 12:16:04 door - Ariën -
Hoe dan wel? Je slaat in een cookie het sessie ID op dat je uitgeeft nadat je eenmalig het wachtwoord hebt gecontroleerd. Controleren doe je ook niet met een opgeslagen wachtwoord, maar met een hash van het wachtwoord. PHP heeft daar twee functies voor: password_hash() en password_verify(). Gebruik dat. MD5 is zwaar antiek en niet veilig.
Je moet erg zuinig zijn met cookies die sessie ID's bevatten. De regel is dat je alleen inlogt en cookies instelt wanneer de verbinding met TLS is beveiligd (= HTTPS). Cookies stuur je vervolgens met het Same-Site attribuut, zodat alleen het domein dat de cookie heeft verstuurd er bij kan. En alleen met het HTTP Only attribuut, zodat JavaScript er juist niet bij kan. Dat is met opzet, voor de beveiliging.
Zoals je nu bezig bent is het inlogsysteem in hobby-stadium en onveilig. Open voor SQL-injectie en zonder HTTP-headers die XSS aan banden leggen, zonder CSRF-token, etc. Maar je kunt deze dingen wel allemaal stap voor stap gaan inbouwen. Een onmisbare bron hierbij is de OWASP-Cheat Sheet series. Begin bij voorkeur hier. Dan hoef je het wiel niet opnieuw uit te vinden, en kan je er toch je eigen draai aan geven (ook belangrijk!). Succes!