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?

Alvast bedankt,
Even nog een vraagje.
Als een gebruiker een verzoek heeft gemaakt, om de 2FA aan te zetten, wordt er dus een rij aangemaakt in de database.
Na 5 min wil ik dat de rij dat is aangemaakt, automatisch weer wordt verwijderd.
Kan dat?
Zoja, hoe kan ik dat regelen?
Met SQL:

DELETE FROM tabel WHERE creationTime < (NOW() - INTERVAL 5 MINUTE)
En waar moet ik dat dan invoeren?
Bij het sql paneel in het tabel?
Of in de PHP code?
Of ergens anders?
Als SQL-query in je PHP-code.
Steeds bij het uitvoeren ervan ruimt het oude records op.
Oké.
Wat is het creationTime eigenlijk?
En nog even wat over de mysqli database tijd:
Wat voor type kolom zou ik het best voor de vervaldatum doen?
De kolom heet vervaldatum en is als type momenteel een timestamp.
Is dat goed? Of niet?
De code van de tijd (die dan in de vervaldatum kolom wordt gezet) is:
<?php
$expires = date("d-m-Y H:i:s") + 300;
?>
Is dit goed?
Jin vanTongeren op 09/03/2019 16:50:52

Oké.
Wat is het creationTime eigenlijk?

De datum die jij aanmaakt bij het creëren van het record.

En nog even wat over de mysqli database tijd:
Wat voor type kolom zou ik het best voor de vervaldatum doen?
De kolom heet vervaldatum en is als type momenteel een timestamp.
Is dat goed? Of niet?

Gebruik DATETIME als veld-type.

De code van de tijd (die dan in de vervaldatum kolom wordt gezet) is:
<?php
$expires = date("d-m-Y H:i:s") + 300;
?>
Is dit goed?

Nee, je kan dan NOW() gebruiken in je INSERT-query. Dit is een SQL-functie, en hoort niet tussen quotes.
- Ariën - op 09/03/2019 16:55:17

Nee, je kan dan NOW() gebruiken in je INSERT-query. Dit is een SQL-functie, en hoort niet tussen quotes.


Oké.
Maar wat moet ik dan neerzetten in mijn prepared statement?
Ik heb een prepared statement waarin de parameters zo worden gebonden:
mysqli_stmt_bind_param($stmt, "ssss", $cookieID, $hashedToken, $expires, $hashedUID);
Maar nu moet ik dus $expires laten vervangen door wat?

[size=xsmall]Toevoeging op 09/03/2019 16:59:52:[/size]

Moet ik $expires nou laten vervangen door: "now()"?
Volgens mij zo, omdat je een MySQL-functie gebruikt. Ik weet het niet zeker omdat ik geen prepared statements gebruik.

<?php
$insert = $mysqli->prepare("INSERT INTO tabel (een_veldnaam, publish_date) VALUES (?, NOW())");
?>
- Ariën - op 09/03/2019 16:55:17

Gebruik DATETIME als veld-type.


En nog even over dit.
Ik heb als standaardwaarde current_time en als attribuut: on update current_timestamp.
Is dit correct?
Of moet ik dit aanpassen?
(het veld-type is al datetime)
Ja, dan hoef je die NOW() niet zelf mee te geven.

Reageren