Dag Siemen,
Ik persoonlijk gebruik geen prepared statement in Mysqli. Ik gebruik de functie mysqli_real_escape_string()
. Ook zie ik dat je md5
gebruikt. Dit is sterk af te raden. Dus ik heb die md5
functie even verbeterd naar SHA512
(Nog niet 100% veilig). Het best sla je het wachtwoord in bcrypt
op maar om je niet in de war te helpen met je huidige code gebruik ik SHA512
.
$username = $_POST['username'];
// Zet het wachtwoord om naar sha512
$password = hash('sha512', $_POST['password']);
$result = $conn->query("SELECT * FROM users WHERE username=' ".$conn->escape($username)." ' AND password=' ".$conn->escape($password)." ' ");
if($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
// Sessies aanmaken, header naar homepage/mijnaccount etc
}
} else {
echo 'Er is iets fout!';
}
Ok, zoals je ziet heb ik je query even aangepast naar:
$result = $conn->query("SELECT * FROM users WHERE username=' ".$conn->escape($username)." ' AND password=' ".$conn->escape($password)." ' ");
Deze escaped de value. $conn->escape();
Je moet nu in de class waar die $conn vandaan komt deze functie toevoegen.
//Deze moet je toevoegen
public function escape($query) {
//Deze zorgt ervoor dat de ' en " \ er uit worden gefilterd.
return mysqli_real_escape_string($joudatabase,$query);
}
Opzich hoef je het wachtwoord niet te escape aangezien die in een hash wordt gezet. Maar voor de zekerheid doen we dit toch.
Ik hoop dat ik jou vragen beantwoord heb.
Misschien leg ik het moeilijk uit of leg ik iets verkeerd uit. Maar ik heb mijn best gedaan.
Groeten,
Jitse