Beste,
Ik ben bezig met een 2FA systeem.
Misschien kent u dat wel van Google Authenticator. Dat een gebruiker dat wil inloggen, eerst een email krijgt waar een code in staat en vervolgens die code moet invoeren om uiteindelijk in te kunnen loggen.
Nu ben ik bezig met zo'n systeem, maar ik wil geen externe API'S gebruiken. (Bijv. Google Authenticator)
In plaats daarvan wil ik een eigen systeem maken.
Maar hoe zal ik dit het best aanpakken?
Een token genereren natuurlijk, met $token = random_bytes(5).
En een verloopdatum met $expires = date(U) + 300;
Zijn er nog extra kolommen die ik moet toevoegen in de MYSQLI database, om de veiligheid van dit systeem te verbeteren, of nog andere (veiligheids)suggesties?
[size=xsmall]Toevoeging op 09/03/2019 17:24:52:[/size]
- Ariën - op 09/03/2019 16:21:37
Met SQL:
DELETE FROM tabel WHERE creationTime < (NOW() - INTERVAL 5 MINUTE)
Nog heel even over dit.
Is dit veilig op deze manier?
Of moet dit op een prepared statement?
zoals dit:
<?php
$sql2FA = 'DELETE FROM autorisatie WHERE creationTime';
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql2FA)) {
echo 'MYSQLI statement voor 2FA auto verwijder is mislukt';
exit();
}
else {
mysqli_stmt_bind_param($stmt, "s", "<(NOW() - INTERVAL 5 MINUTE)");
mysqli_stmt_execute($stmt);
}
?>
Of is dit verkeerd?
Hoe kan ik mysqli commando invoeren als query?
ik heb nu dit:
<?php
$sql2FA = 'DELETE FROM autorisatie WHERE creationTime=?';
$stmt2FA = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt2FA, $sql2FA)) {
echo 'MYSQLI statement voor 2FA auto verwijder is mislukt';
exit();
}
else {
$timedelete = "<(NOW() - INTERVAL 5 MINUTE)";
mysqli_stmt_bind_param($stmt2FA, "s", $timedelete);
mysqli_stmt_execute($stmt2FA);
$result = mysqli_stmt_get_result($stmt2FA);
Maar ik geloof niet dat dit goed is, want nu krijg ik:
Warning: mysqli_stmt_init(): Couldn't fetch mysqli in C:\xampp\htdocs\website met 2FA\header.php on line 52
Warning: mysqli_stmt_prepare() expects parameter 1 to be mysqli_stmt, bool given in C:\xampp\htdocs\website met 2FA\header.php on line 53
wilt u iets voorstellen?
Maakt mij niet uit of het oop / pdo / procedural is.
@Rob: Op zich een duidelijk verhaal wat je schrijft maar is dan een "code via de mail" hetzelfde als "emailverificatie" wat ik nu slechts eenmalig doe wanneer een nieuwe gebruiker zich registreert? (Dus bij het registreren een emailadres laten invullen en dan een mailtje sturen met een bevestigingslink) zo niet waar zit dan precies het verschil?
Dit alles lijkt ook allemaal wat moeite te kosten, en dan gaat het niet eens over (feilloze) implementaties van technische concepten maar knowhow over syntax - wellicht eerst eens ergens een standaard oplossing vandaan trekken en later als je wat meer ervaring/bagage hebt opnieuw proberen het wiel zelf uit te vinden?
Om het even helder te houden sla je de 'secret' dus op in de database bij de gebruiker. En aan de hand van getQRCodeGoogleUrl() kan je een QR-code genereren.
@Frank: Die "mail" waar ik het over had is meer zoals ie door Jin bedoelt wordt: "een tweede [extra] authenticatie" (je hebt ook toegang tot de mail). Dat je de juiste code hebt ingevoerd sla ik wel op in de sessie (evt. met een time-out), maar de volgende keer zul je 'm weer moeten invoeren. Maar je zou er dus gewoon een extra "authenticator" aan toe kunnen voegen die "verified" heet. Die zal dan ergens op moeten slaan of de user al geverifieerd is, en daarna dus altijd true retourneren (moet je al wel weten om welke gebruiker het gaat, bijvoorbeeld aan de hand van inloggen met password). Als iemand nog niet geverifieerd is schiet je een mailtje af (vergelijkbaar met de "eenmalige code" waar we het hierboven steeds over hebben).
Hallo.
Ik ben weer met een probleem met mijn 2FA systeempje.
Ik ben nu bezig met het 2FA code verzenden voor als de gebruiker dan gaat inloggen.
Mijn submit button doet het niet.
Als ik erop klik, gebeurt er letterlijk niets.
Ik weet niet hoe dit kan.
Dit is mijn (formulier) code: