Ik logde altijd in met een query zoals hieronder zonder zout :(
$qry = '
select
l.id,
l.login,
schermnaam,
hash
from
logins l
where
l.login = "' . mysqli_real_escape_string($con, $_POST['email']) . '" and
(hash="' . hash('sha512', $_POST['pw']) . '") and
true
';
Ik zou echter de veiligheid willen verhogen en ook de salt bijvoegen.
Ik weet password_verify en password_hash maar zie niet onmiddellijk hoe te implementeren in de inlogquery.
De wachtwoord wijzigenquery, OK dat kan maar inloggen?
Hoe doen jullie dat?
Wat gebruiken jullie zoal als zout? Woorden, afkortingen, speciale tekens, het systeem(de functie) zelf laten aanmaken, zelf iets maken via random generator?
Hoe zonder zout converteren naar met zout zonder veel last voor de gebruikers?
Ok dat lukt om een (extra)salt aan te maken maar hiermee kan je niet inloggen.
Waarom de lijn $md5Pass = md5( $salted );? Daarna doe je niets meer met $md5Pass.
OK Nu begrijp ik wat je bedoelt.
Na ophalen van het record moet ik nog steeds de hash controleren. Dat was echter wat ik net probeerde te vermijden. Mijn query controleert in 1 beweging wachtwoord en login en dat wou ik behouden. Mogelijks is dit onmogelijk.
Dit zou moeten werken
<?php
$query = "SELECT naam, plaats, username, salt, hash
FROM leden
WHERE username = '$username'
AND MD5(CONCAT(salt, '_', '$password') = hash
";
?>
Maar de vraag is of je database dan wel zo slim is om dat te optimaliseren en alleen voor dat ene record met username = '$suername' de hash te bepalen en niet voor alle 10.000 records in je database.
Ik ga dan toch maar werken met de password_verify en controleren via php. Sinds php 8.0 gebruikt deze standaard zijn eigen zoutvaatje.
Ik stel wel vast dat de lengte veel kleiner is dan via hash('sha512', $_POST['pw']). Slechts 60 of 97 ipv 128 en bevat ook nog de salt. Is dit dan nog wel veilig denk ik dan.
Welke hash zou ik het best gebruiken?
PASSWORD_DEFAULT, PASSWORD_BCRYPT, PASSWORD_ARGON2I of PASSWORD_ARGON2ID en eventuele extra opties. Ik wil een goede beveiliging :)
Bedankt Het is ook daar dat ik de info haal en ook op w3school en niet te vergeten HIER.
Maar het is me niet zozeer de tijd welke me interesseert. Er logt toch zelden meer dan 1 persoon in terzelfder tijd. De veiligheid is dus veel belangrijker.
password_hash ondersteunt dus slechts 4 mogelijkheden momenteel. Wat zou daarvan dus de beste zijn?
Jan
?Onbekende gebruiker
16-06-2022 11:44
Alles is beter dan wat je had, met MD5. Daarvoor zijn zelfs rainbow tables om de beveiliging mee te kraken.
Gebruik vooral password_hash() en password_verify().