Door
rof rof
op 03-05-2017 16:39
gewijzigd op 04-05-2017 13:15
3.759 views
Ik heb geprobeerd om een login script te maken met php. Nou is het zo dat als ik via het inlog formulier wel terecht kom op de login.php pagina. Na wat troubleshooten kwam ik op het probleem dat hij wel de POST oppakt, maar er verder niks mee doet. Ik maak hierbij gebruik van prepared statements. Hier komt hij niet voorbij. Met een boolean heb ik neer gezet of hij goed is en een SESSION moet aanmaken voor de gebruiker of dat hij fout is en door word verwezen naar het inlog form.
Nu is mijn vraag: Hoe krijg ik het toch voor elkaar dat hij door de prepare heen komt en dat ik gewoon inlog als het goed is en anders het word afgebroken?
Het introduceren van nieuwe variabelen is ook niet nodig, dit vertroebelt enkel de leesbaarheid. Ik volg ook niet helemaal waarom het nodig is om een username + wachtwoord door strip_tags() te halen? En wat is $mysqli->error_list precies?
oke ik ben nog even aan het stoeien geweest en heb besloten om alles naar PDO om te zetten. Ik ben ook een stuk verder gekomen hiermee voor mijn gevoel. Als ik nu een username en wachtwoord even aflees uit de database en die values in de query stop, leest men code er helemaal doorheen en werkt het ook. Maar nog niet met de POST values. Ik heb die strip tags en dergelijke allemaal weggehaald en de onnodige error_list ook. code hieronder te vinden.
<?php
$username = $_POST['username'];
$password = $_POST['password'];
$stmt = $conn->prepare("SELECT * FROM testlogin WHERE username = ? AND password = ?");
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);
$stmt->execute();
$count = $stmt->rowCount();
$row = $stmt->fetch();
if($count == 1){
$_SESSION['logged_in'] = true;
$_SESSION['username'] = $username;
//header('Refresh: 1; url=beveiligd.php');
echo 'Je bent succesvol ingelogd. Je wordt doorgestuurd.';
}else{
// header('Refresh: 1; url=login_form.php');
echo 'Deze combinatie van gebruikersnaam en wachtwoord is niet juist!';
}
$conn = null;
?>
Je bent je bewust van het feit dat je je password niet veilig omzet in een hash? En dat het dus als plain-text vergeleken wordt? Niet echt gewenst.....
En daarom is bovenstaande code dus *NIET* veilig. En *ook* niet op de juiste manier opgebouwd.
Je rijgt opnieuw rechtstreeks user input in een querystring. Dit moet je op een indirecte manier doen via placeholders en het binden van variabelen hieraan. Dat is de crux van prepared statements die queries veilig(er) maakt.