Best Practices für die Verwaltung von Logik für Wiederholungsversuche mit SMS 2FA

July 27, 2021
Autor:in:
Prüfer:in:

Best Practices für die Verwaltung von Logik für Wiederholungsversuche mit SMS 2FA

Hallo und Danke fürs Lesen! Dieser Blogpost ist eine Übersetzung von Best practices for managing retry logic with SMS 2FA. Während wir unsere Übersetzungsprozesse verbessern, würden wir uns über Dein Feedback an help@twilio.com freuen, solltest Du etwas bemerken, was falsch übersetzt wurde. Wir bedanken uns für hilfreiche Beiträge mit Twilio Swag :)

Menschen sind ungeduldige Wesen. In den meisten Teilen der Welt mögen SMS-Verifizierung oder Zwei-Faktor-Authentisierung (2FA) zwar schnell Anwendung finden, doch wir empfehlen immer, Wiederholungspuffer in Verifizierungs-Workflows zu integrieren. Dadurch wird Folgendes verhindert:

  • Versehentliches Spamming eines Benutzers mit wiederholten Textnachrichten
  • Erreichen von API-Ratenbegrenzungen
  • Gebührenbetrug oder unnötige Ausgaben

Die Best Practices in diesem Beitrag wurden zwar mit Blick auf die Twilio Verify-API verfasst, doch viele gelten unabhängig von deinem 2FA-Anbieter. In Kombination mit anderen Best Practices wie der Erstellung einer Zulassungsliste von Ländervorwahlen zur Verifizierung können diese Schritte dazu beitragen, dass dein Workflow für die Benutzerverifizierung so reibungslos wie möglich abläuft.

Starten einer Demo-Anwendung mit Best Practices für SMS-Wiederholungen

Dieses Projekt ist auch für die schnelle Bereitstellung auf dem Twilio CodeExchange verfügbar – es ist kein Code erforderlich!

Ich habe eine Anwendung entwickelt, die die in diesem Beitrag beschriebenen Best Practices zeigt. Die Anwendung lässt sich schnell starten, da sie mit Twilio Functionserstellt wurde, der serverlosen Umgebung von Twilio. Du kannst deine eigene starten, indem du diese Anweisungen befolgst.

Zu den Voraussetzungen gehören:

  • Node.js
  • Ein kostenloses Twilio-Konto (über diesen Link kannst du dich kostenlos anmelden und erhältst beim Upgrade deines Kontos ein Guthaben von 10 $)
  • Ein Verify-Dienst. Erstelle einen in der Twilio-Konsole.

Klone das Beispielprojekt in meinem GitHub oder lade es herunter:

git clone https://github.com/robinske/verify-retry.git && cd verify-retry

Installiere die Abhängigkeiten mit npm install. Benenne dann die .env.example-Datei in .env um (aus Sicherheitsgründen ist die .env-Datei Teil von .gitignore und wird nicht an die Quelle übergeben) und fülle die Variablen mit deiner Konto-SID und deinem Auth-Token aus, der in der Twilio-Konsole zu finden ist. Gib die Verify Service SID ein, die du zuvor erstellt hast:

# find in the twilio console: https://twilio.com/console
ACCOUNT_SID=
AUTH_TOKEN=

# create one in the twilio console: https://twilio.com/console/verify/services
VERIFY_SERVICE_SID=

Starte das Projekt mit npm start und navigiere zu http://localhost:3000/index.html, um es zu testen.

Best Practices für das Wiederholen von SMS 2FA-Codes

Implementieren von Timeouts in der Schaltfläche zum erneuten Senden.

Füge einen Puffer zwischen Wiederholungen hinzu, um ein schlechtes Verhalten oder das versehentliche Senden mehrerer Codes zu verhindern. Wir empfehlen, mit 30 Sekunden zu beginnen.

Ausgegraute Option zum erneuten Senden des Codes mit der Meldung „resend code in 22 seconds“

In der Demo zählen wir vom maximalen Timeout abwärts und lassen die Schaltfläche deaktiviert, bis das Timeout abgelaufen ist. Für eine Alternative mit weniger Animation könntest du:

  • den Countdown anzeigen, wenn noch 5 Sekunden verbleiben
  • die Schaltfläche zum erneuten Senden abblenden, bis das Timeout abgelaufen ist, und Text anzeigen, der den Gesamtpuffer angibt (ohne Countdown)
  • den Link für die Wiederholung erst anzeigen, wenn das Timeout abgelaufen ist

Nachverfolgen von Wiederholungsversuchen.

Die Verify-API beinhaltet eine Liste von Verifizierungsversuchen in der Antwort, die du verwenden kannst, um den Wiederholungspuffer mit jedem weiteren Versuch zu erhöhen. Du kannst außerdem die Zahl der Versuche verwenden, um deine eigenen Ratenbegrenzungen zusätzlich zu den Ratenbegrenzungen der Verify-API durchzusetzen (5 Verifizierungsstarts in einem Zeitraum von 10 Minuten).

In dieser Funktion ist ein Beispiel für die Erhöhung des Timeouts mit mehr Versuchen zu sehen. Das Standard-Timeout ist hier das Maximum (10 Minuten), mit dem verhindert werden kann, dass deine Anwendung API-Ratenbegrenzungen erreicht.

function getRetryTimeout(attemptNumber) {
 const retryTimeouts = {
   1: 30,
   2: 40,
   3: 60,
   4: 90,
   5: 120,
 };

 return retryTimeouts[attemptNumber] || 600;
}

Best Practices für Fallback-Kanäle

Anbieten von alternativen Kanälen wie Voice beim dritten Verifizierungsversuch

Sprachanrufe erhalten in Telefonnetzen Priorität und können sicherstellen, dass deine Kunden einen Verifizierungscode erhalten. Der Sprachkanal kann jedoch für Gebührenbetrug missbraucht werden. Sofern du also kein Festnetz erkennst oder kein Geschäftsszenario für Anrufe vorliegt, empfehlen wir, mit der Verfügbarmachung dieses Kanals zu warten, bis der dritte oder vierte Versuch, eine SMS zu senden, unternommen wurde, oder ihn ganz und gar zu deaktivieren.

Zeige die Option „Call me instead“ für Benutzer an, sobald mehrere SMS-Versuche unternommen wurden:

Eingabefeld für Einmal-Sicherheitscode mit ausgegrauter Nachricht zum erneuten Versenden des Codes und anklickbarem Link mit der Meldung "having trouble receiving SMS, call me instead"

Erkennen von Festnetznummern

Zusätzlich zur Verwendung der Lookup-API von Twilio zur Erkennung ungültiger Telefonnummern kannst du die API verwenden, um Festnetznummern zu erkennen. Du kannst den call-Kanal anstelle von SMS für diese Nummern verwenden.

Wenn du im Beispielprojekt einen Festnetzanschluss eingibst, wird automatisch angerufen, der Verifizierungscode wird nicht per SMS gesendet.

Eingabefeld für Einmal-Sicherheitscode mit der Meldung „landline detected. sent call verification“

Deaktivieren nicht verwendeter Kanäle in der Twilio-Konsole

Wenn du bestimmte Kanäle ganz und gar deaktivieren möchtest, kannst du das im Verify-Abschnitt der Twilio-Konsole tun.

Twilio Verify-Konsole mit Umschaltflächen zur Deaktivierung von Anruf- und E-Mail-Kanälen

Implementieren von reCAPTCHA für Sprachanrufe

Implementiere reCAPTCHA, um Bots in deinem Verifizierungsablauf zu erkennen und zu verhindern. Weitere Informationen zur Implementierung dieser Funktion findest du in der Entwicklerdokumentation von Google.

Hinzufügen zusätzlicher Ratenbegrenzungen

Die Twilio Verify-API unterstützt programmierbare Ratenbegrenzungen, die du auf bestimmte Segmente je nach Anfrage wie eine IP-Adresse, eine Geolokalisierung oder eine Ländervorwahl anwenden kannst.

Allgemeine Best Practices für die Benutzerverifizierung

Die Logik für Wiederholungsversuche ist ein Bestandteil der Schaffung eines nahtlosen Workflows für die Benutzerverifizierung. Zu weiteren Best Practices gehören:

1. Verwenden der Lookup-API von Twilio, um ungültige Nummern und Leitungsarten vor dem Senden einer Verifizierung zu erkennen

Zusätzlich zur Verwendung des Netzbetreiber-Lookup zur Identifizierung von Festnetznummern kann Lookup eingesetzt werden, um ungültige Nummern zu identifizieren, bevor du versuchst, einen Verifizierungscode zu senden.

2. Erstellen einer Zulassungs- oder Sperrliste von Ländern

Die Verwendung einer Zulassungsliste von Ländern bei der Anmeldung ist eine gute Möglichkeit, sicherzustellen, dass du die Vorschriften einhältst, Betrug reduzierst oder deine Onboarding-Pipeline anderweitig kontrollierst.

3. Anzeigen vollständiger Telefonnummern für die erste Benutzerverifizierung

Zeige bei Anwendungsfällen zur Verifizierung von Telefonnummern (im Gegensatz zur laufenden Anmeldungsauthentifizierung oder Zwei-Faktor-Authentisierung) die vollständige Telefonnummer in der Benutzeroberfläche an, damit der Benutzer Tippfehler erkennen kann.

Eingabefeld für Einmal-Sicherheitscode mit Meldung, die die vollständige Telefonnummer mit der Option zum Bearbeiten anzeigt.

4. Maskieren von Telefonnummern für die laufende Anmeldungsauthentifizierung oder Zwei-Faktor-Authentisierung

Nach der ersten Verifizierung der Telefonnummer sollte die Telefonnummer bei späteren Verwendungen maskiert werden, um PII-Lecks zu verhindern. Im Gegensatz zum obigen Beispiel gibt es keine Möglichkeit, eine Telefonnummer für die laufende Authentifizierung zu bearbeiten. Wir empfehlen, 3 oder 4 Nummern verfügbar zu machen und den Rest zu maskieren, wie +1 (5**) ***-**67 oder ********567.

Eingabefeld für Einmal-Sicherheitscode mit Meldung, die die verborgene Telefonnummer ohne Option zum Bearbeiten anzeigt.

Optional: Bereitstellen des Projekts mit Twilio Functions

Um dieses Projekt mit Twilio Functions bereitzustellen, benötigst du:

Nach Installation dieser Abhängigkeiten kannst du dieses Projekt bereitstellen, indem du den folgenden Befehl im Ordner verify-retry ausführst:

twilo serverless:deploy

Nächste Schritte bei der Benutzerverifizierung

Nach Ansicht von Miranda Wei, Expertin für Usable Privacy, sollten wir darüber nachdenken, Usable Security als eine Form des Kundenservice mit Fokus auf Sicherheit auszugestalten, der sich ständig verändert. Man könne Sicherheitsmaßnahmen nicht einmalig einrichten und sich dann nicht mehr darum kümmern. Diese Best Practices sind ein guter Anfang, wir empfehlen jedoch, deine Supportkosten und die Benutzerzufriedenheit zu überwachen, damit du die beste Lösung bereitstellen kannst, während sich sowohl dein Produkt als auch die Authentifizierungstechnologie weiterentwickeln.

Weitere Ressourcen findest du hier:

Ich bin gespannt, welche Projekte du entwickelst und sicherst!