NodeJS und Krypto Verwendung, gerade jetzt, wenn sich ein Benutzer anmeldet, ich ein zufälliges Auth-Token erzeugen:Generieren von eindeutigen Token in einem NodeJS, Crypto Token-Authentifizierungsumgebung
var token = crypto.randomBytes(16).toString('hex');
Ich weiß, es unwahrscheinlich ist, aber es gibt eine sehr kleine Chance, dass zwei Tokens den gleichen Wert haben.
Dieser Meas könnte ein Benutzer theoretisch auf einem anderen Konto authentifizieren.
Nun, ich sehe zwei offensichtliche Methode, um diese passieren:
- Wenn ich das Token generieren, fragen Sie die Benutzer-Datenbank und sehen, ob ein Token mit dem gleichen Wert bereits vorhanden ist. Wenn dies der Fall ist, generieren Sie einfach einen anderen. Wie Sie sehen können, ist dies nicht perfekt, da ich der Datenbank Abfragen hinzufüge.
- Da jeder Benutzer einen eindeutigen Benutzernamen in meiner Datenbank hat, konnte ich
ein zufälliges Token mit dem Benutzernamen als geheimer Generatorschlüssel generieren. Auf diese Weise gibt es keine Möglichkeit, dass zwei Token den gleichen Wert haben. Kann
Krypto das tun? Ist es sicher?
Wie würden Sie es tun?
Du hast mir gerade noch eine andere Idee ... wenn sich der Benutzer anmeldet, werde ich für die Nutzer suchen, dass bestimmte Token hat .. wenn die Abfrage findet mehr als ein Ergebnis, lassen Sie den Benutzer einfach neu einloggen - so kann ich auch das schlimmste Szenario verarbeiten - was denken Sie? –
Die Wahrscheinlichkeit, dass Ihr Server zufällig eine Kollision in Tokens zwischen zwei Benutzern generiert, ist viel geringer als die Wahrscheinlichkeit, dass ein motivierter böswilliger Benutzer das Token eines anderen Benutzers erraten würde. Wenn Sie glauben, dass der erste Fall ein potenzielles Problem ist, dann sollten Sie glauben, dass der zweite Fall eher ein Problem ist und adressieren Sie ihn, indem Sie mehr zufällige Bytes verwenden. Wenn Sie glauben, dass 16 Byte wahrscheinlich ausreichen, um einen motivierten Brute-Force-Angreifer davon abzuhalten, das Token eines Zielbenutzers zu erraten, sollte es folgen, dass 16 Byte ausreichen, um zu verhindern, dass Ihr Server eine Kollision generiert. – AgentME
ehrfürchtige Antwort im Allgemeinen zu crypto – hauron