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?

Houd het kort, exact en simpel.
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.....
nee snap ik, dit is even voor het testen. Ik heb de hash waardes al klaar liggen en dat was dan ook de volgende stap die ik wou gaan nemen.

[size=xsmall]Toevoeging op 04/05/2017 14:38:24:[/size]

Sorry dat ik zo snel weer reageer, maar ik heb een update op de status.
 $username = $_POST['username'];
$password = $_POST['password'];
$hashed = hash('sha512', $password); 

$stmt = $conn->prepare("SELECT * FROM testlogin WHERE username = '".$username."' AND password = '".$hashed."'");


Met deze code werkt m'n login systeem. Mijn vraag hierop volgend is dan weer: is dit wel veilig?
Maar niet echt de juiste manier opgebouwd. Kijk eens naar je BindParam die je eerder wel goed leek toe te passen ;-)
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.
Je gebruikt vraagtekens als placeholders en :waarde om ze te binden. Dat zijn twee verschillende manieren door elkaar. probeer dit eens:


<?php
$stmt = $conn->prepare("SELECT * FROM testlogin WHERE username = :username AND password = :password");
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);
?> 

Reageren