password_hash()?
Ik ben bezig met password_hash() maar het werkt niet... Hij geeft geen errors, maar toch blijft hij zeggen: De wachtwoorden komen niet overeen. hieronder mijn code:
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
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
<div class="active tab-pane" id="instellingen">
<?php if (!empty($_SESSION['updateerror'])) {?><p><?php echo $_SESSION['updateerror']; unset($_SESSION['updateerror']); ?></p><?php }?>
<?php if (!empty($_SESSION['updatesucces'])) {?><p><?php echo $_SESSION['updatesucces']; unset($_SESSION['updatesucces']); ?></p><?php }?>
<form action="/paneel/pages/updatesettings.php" method="POST" class="form-horizontal">
<div class="form-group">
<label for="inputName" class="col-sm-2 control-label">Gebruikersnaam</label>
<div class="col-sm-10">
<input type="text" disabled class="form-control" id="inputName" placeholder="<?=$gebruikersnaam?>">
</div>
</div>
<div class="form-group">
<label for="inputEmail" class="col-sm-2 control-label">Emailadres</label>
<div class="col-sm-10">
<input type="email" name="email" class="form-control" id="inputEmail" value="<?=$getuseremail?>">
</div>
</div>
<div class="form-group">
<label for="inputName" class="col-sm-2 control-label">Wachtwoord</label>
<div class="col-sm-10">
<input type="password" class="form-control" name="password" id="inputPass" placeholder="Uw huidige wachtwoord">
</div>
</div>
<div class="form-group">
<label for="inputExperience" class="col-sm-2 control-label">Beschrijving</label>
<div class="col-sm-10">
<textarea class="form-control" maxlength="100" name="beschrijving" id="inputBeschrijving" placeholder="Uw persoonlijke beschrijving."></textarea>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" name="update" class="btn btn-primary">Update mijn gegevens</button>
</div>
</div>
</form>
</div>
//APART BESTAND
<?php
if (isset($_POST['update'])) {
$username = $_SESSION['username'];
$email = $mysqli->real_escape_string($_POST['email']);
$password = $_POST['password'];
$beschrijving = $_POST['beschrijving'];
$prefix = $mysqli->real_escape_string($_CONFIG['prefix']);
$table = $prefix.'users';
$result = $mysqli->query("SELECT * FROM `$table` WHERE `username`='$username'");
if(FALSE === $result) {
exit();
} else {
$rows = $result->num_rows;
if (password_verify($password, $row['password'])) {
$result = $mysqli->query("UPDATE FROM `$table` SET `email`='$email' AND `beschrijving`='$beschrijving' WHERE `username`='$username'");
$_SESSION['updatesucces'] = "Uw gegevens zijn aangepast.";
header('Location: /paneel/profiel/'.$_SESSION['username'].'');
exit();
} else {
$_SESSION['updateerror'] = "De wachtwoorden komen niet overeen.";
header('Location: /paneel/profiel/'.$_SESSION['username'].'');
exit();
}
}
} else {
$_SESSION['updateerror'] = "De wachtwoorden komen niet overeen.";
header('Location: /paneel/profiel/'.$_SESSION['username'].'');
exit();
?>
<?php if (!empty($_SESSION['updateerror'])) {?><p><?php echo $_SESSION['updateerror']; unset($_SESSION['updateerror']); ?></p><?php }?>
<?php if (!empty($_SESSION['updatesucces'])) {?><p><?php echo $_SESSION['updatesucces']; unset($_SESSION['updatesucces']); ?></p><?php }?>
<form action="/paneel/pages/updatesettings.php" method="POST" class="form-horizontal">
<div class="form-group">
<label for="inputName" class="col-sm-2 control-label">Gebruikersnaam</label>
<div class="col-sm-10">
<input type="text" disabled class="form-control" id="inputName" placeholder="<?=$gebruikersnaam?>">
</div>
</div>
<div class="form-group">
<label for="inputEmail" class="col-sm-2 control-label">Emailadres</label>
<div class="col-sm-10">
<input type="email" name="email" class="form-control" id="inputEmail" value="<?=$getuseremail?>">
</div>
</div>
<div class="form-group">
<label for="inputName" class="col-sm-2 control-label">Wachtwoord</label>
<div class="col-sm-10">
<input type="password" class="form-control" name="password" id="inputPass" placeholder="Uw huidige wachtwoord">
</div>
</div>
<div class="form-group">
<label for="inputExperience" class="col-sm-2 control-label">Beschrijving</label>
<div class="col-sm-10">
<textarea class="form-control" maxlength="100" name="beschrijving" id="inputBeschrijving" placeholder="Uw persoonlijke beschrijving."></textarea>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" name="update" class="btn btn-primary">Update mijn gegevens</button>
</div>
</div>
</form>
</div>
//APART BESTAND
<?php
if (isset($_POST['update'])) {
$username = $_SESSION['username'];
$email = $mysqli->real_escape_string($_POST['email']);
$password = $_POST['password'];
$beschrijving = $_POST['beschrijving'];
$prefix = $mysqli->real_escape_string($_CONFIG['prefix']);
$table = $prefix.'users';
$result = $mysqli->query("SELECT * FROM `$table` WHERE `username`='$username'");
if(FALSE === $result) {
exit();
} else {
$rows = $result->num_rows;
if (password_verify($password, $row['password'])) {
$result = $mysqli->query("UPDATE FROM `$table` SET `email`='$email' AND `beschrijving`='$beschrijving' WHERE `username`='$username'");
$_SESSION['updatesucces'] = "Uw gegevens zijn aangepast.";
header('Location: /paneel/profiel/'.$_SESSION['username'].'');
exit();
} else {
$_SESSION['updateerror'] = "De wachtwoorden komen niet overeen.";
header('Location: /paneel/profiel/'.$_SESSION['username'].'');
exit();
}
}
} else {
$_SESSION['updateerror'] = "De wachtwoorden komen niet overeen.";
header('Location: /paneel/profiel/'.$_SESSION['username'].'');
exit();
?>
Toevoeging op 04/01/2017 16:38:52:
Stom foutje sorry! Ik moest $row = $result->fetch_assoc(); hebben en niet $rows = $result->num_rows;
Toevoeging op 04/01/2017 16:51:43:
Nu wel een ander probleem, ik heb dus dat form, maar ze mogen niet < en > gebruiken. Hoe kan ik dit disabelen met PHP?
Gewijzigd op 04/01/2017 16:36:47 door - Rob -
Dit voorkomt ook dat je het escapen soms vergeet, zoals bij $username...
Mogelijk kun je je hele ledenbestand om zeep helpen met gebruikersnamen als:
EDIT
Quote:
Nu wel een ander probleem, ik heb dus dat form, maar ze mogen niet < en > gebruiken. Hoe kan ik dit disabelen met PHP?
Dit is weer een escaping-kwestie. real_escape_string() gebruik je in de MySQL context, functies als htmlspecialchars() gebruik je in de HTML context.
Gewijzigd op 04/01/2017 16:56:32 door Thomas van den Heuvel
Thomas van den Heuvel op 04/01/2017 16:55:02:
Nope, bij registratie heb ik dit al uitegeschakeld, bij login en wachtwoord vergeten. EN hij pakt session username dus het heeft geen zin voor de input te editen.
Stel dat je namen met <> toestaat dan weet ik wel een leuke: "Henk</div>" (of iets soortgelijks uiteraard...). Wanneer je deze vervolgens niet escaped als je deze weergeeft dan ligt je layout waarschijnlijk in puin.
Toevoeging op 04/01/2017 17:32:10:
en dit werkt ook niet:
$beschrijvijg = htmlspecialchars($beschrijving, ENT_QUOTES, ENT_COMPAT, ENT_NOQUOTES, ENT_IGNORE, ENT_SUBSTITUTE, ENT_DISALLOWED);
Gewijzigd op 04/01/2017 17:26:36 door - Rob -
$beschrijvijg? Lijkt mij een typfout? Hoe pas je deze htmlspecialchars() functie toe?
Quote:
Dit voorkomt ook dat je het escapen soms vergeet, zoals bij $username...
Dit is de session naam die uit de database wordt gegaalt, deze gebruikersnaam krijg je als je een account aanmaakt waar een escaping op staat. Dus dan lijkt mij het niet nodig voor dit te gaan escapen want je kan het niet aanpassen?
Toevoeging op 04/01/2017 17:37:00:
- Ariën - op 04/01/2017 17:34:28:
$beschrijvijg? Lijkt mij een typfout? Hoe pas je deze htmlspecialchars() functie toe?
Helemaal over het hoofd gezien :S dat was t inderdaad.
Ook voor $_SESSIONS hoef je niet zeker te zijn dat ze veilig zijn. Het is vergezocht, maar ze kunnen ook aangepast worden. Deze zou ik ook voor de zekerheid dus ook escapen.
Gewijzigd op 04/01/2017 17:41:40 door - Rob -
Als je iets weergeeft dien je content te escapen zodat deze content mogelijk speciale betekenis (zoals HTML tags) verliest (als dit je bedoeling is). Het is niet de bedoeling dat je dingen op voorhand escaped (escape on input). Het is zaak dat je consequent output escaped. Als je dit namelijk niet overal op dezelfde plek + wijze doet kan er verwarring ontstaan of dit al is gebeurd of mogelijk worden er dingen dubbel ge-escaped.