Die E-Mail zum Zurücksetzen des Passworts ist der Generalschlüssel zu Ihrem Produkt. Wer sie lesen kann, kann das Konto übernehmen – deshalb nehmen Angreifer sie ins Visier, und deshalb haben Nutzer gelernt, ihr zu misstrauen.
Ein guter Reset-Ablauf muss sicher genug sein, um diesen Angreifern standzuhalten, und klar genug, dass echte Nutzer ihm in wenigen Sekunden vertrauen. Dieser Leitfaden behandelt beides – von dem Moment, in dem jemand auf „Passwort vergessen?“ klickt, bis zur Bestätigungs-E-Mail nach der Änderung.
Der Ablauf im Überblick
- Der Nutzer gibt auf der Seite Passwort vergessen seine E-Mail-Adresse ein.
- Ihre App zeigt immer dieselbe Meldung, ob das Konto existiert oder nicht.
- Existiert es, erstellen Sie einen Einmal-Token und senden einen Reset-Link per E-Mail.
- Der Nutzer öffnet den Link, wählt ein neues Passwort, und der Token ist verbraucht.
- Sie melden die übrigen Sitzungen des Nutzers ab und senden eine E-Mail „Ihr Passwort wurde geändert“.
Schritt 1: Nicht verraten, wer ein Konto hat
Antworten Sie nach dem Absenden des Formulars immer mit demselben Text:
Falls für ada@example.com ein Konto existiert, haben wir einen Link zum Zurücksetzen Ihres Passworts gesendet. Er läuft in 30 Minuten ab.
Zeigen Sie stattdessen „Kein Konto mit dieser E-Mail-Adresse“, verraten Sie jedem mit einer Adressliste genau, welche davon Ihr Produkt nutzen. Halten Sie auch die Antwortzeit ähnlich: Erledigen Sie die Kontosuche und den E-Mail-Versand im Hintergrund, damit die Seite bei unbekannten Adressen nicht merklich schneller antwortet.
Schritt 2: Einen starken Einmal-Token erzeugen
Der Token im Link muss lang, zufällig und unmöglich zu erraten sein:
import { randomBytes, createHash } from 'node:crypto';
const token = randomBytes(32).toString('base64url'); // goes in the email
const tokenHash = createHash('sha256').update(token).digest('hex'); // goes in the database
await db.passwordResets.upsert({
userId: user.id,
tokenHash,
expiresAt: new Date(Date.now() + 30 * 60 * 1000), // 30 minutes
});
Die Regeln:
- Speichern Sie nur einen Hash des Tokens, damit ein Datenbank-Leak keine funktionierenden Reset-Links preisgibt.
- Ein aktiver Token pro Nutzer. Ein neu ausgestellter ersetzt den alten.
- Kurze Gültigkeit: 15 bis 60 Minuten sind üblich.
- Einmalige Verwendung. Löschen Sie den Token, sobald das Passwort geändert wurde.
- Machen Sie ihn ungültig, wenn sich der Nutzer zwischenzeitlich erfolgreich anmeldet oder seine E-Mail-Adresse ändert.
Schritt 3: Die E-Mail sofort senden
Der Nutzer wartet, also senden Sie innerhalb der Anfrage, nicht in einem Batch-Job:
import os
import requests
def send_reset_email(user, token):
link = f"https://app.yourco.com/reset-password/{token}"
res = requests.post(
"https://backend.inbixio.com/api/send-email/",
headers={"X-API-Key": os.environ["INBIXIO_API_KEY"]},
json={
"to_email": user.email,
"subject": "Reset your YourApp password",
"message": render_reset_template(name=user.first_name, link=link, minutes=30),
},
timeout=10,
)
res.raise_for_status()
Senden Sie von einer eigenen, authentifizierten Adresse wie security@yourco.com. Verbinden Sie dieses Postfach in Inbixio als eigenen E-Mail-Server und geben Sie dem Authentifizierungsdienst einen API-Schlüssel, der an diesen Server gebunden ist, damit Reset-E-Mails von der Adresse kommen, die Nutzer erwarten. Falls Sie diesen Server je entfernen, binden Sie den Schlüssel neu. Wie Sie das einrichten, lesen Sie unter Sicherheit von API-Schlüsseln.
Schritt 4: Eine vertrauenswürdige Reset-E-Mail schreiben
Phishing-E-Mails imitieren Passwort-Resets häufiger als jede andere Nachricht. Machen Sie Ihre unverwechselbar:
- Betreff: schlicht und konkret, z. B. „Reset your YourApp password“. Keine Dringlichkeit, keine Ausrufezeichen.
- Ein klarer Button, dazu der vollständige Link als Text für Clients, die Buttons blockieren.
- Die Gültigkeit: „Dieser Link läuft in 30 Minuten ab.“
- Kontext: wann die Anfrage gestellt wurde und, falls bekannt, von welchem Browser oder aus welcher Stadt.
- Was zu tun ist, wenn es nicht der Nutzer war: „Wenn Sie das Zurücksetzen Ihres Passworts nicht angefordert haben, können Sie diese E-Mail ignorieren. Ihr Passwort bleibt unverändert.“
- Keine weiteren Links, Bilder oder Werbung. Je weniger Links, desto leichter lässt sich die E-Mail überprüfen.
<div style="font-family:system-ui,sans-serif;max-width:520px;margin:auto;color:#111;line-height:1.5">
<p>Hi Ada,</p>
<p>We received a request to reset the password for your YourApp account.</p>
<p style="margin:28px 0">
<a href="https://app.yourco.com/reset-password/TOKEN"
style="background:#584efe;color:#fff;padding:12px 20px;border-radius:8px;text-decoration:none;font-weight:600">
Choose a new password
</a>
</p>
<p>This link expires in 30 minutes and can only be used once.</p>
<p>If you didn't ask to reset your password, you can safely ignore this email.</p>
<p style="color:#666;font-size:13px">Button not working? Paste this link into your browser:<br>
https://app.yourco.com/reset-password/TOKEN</p>
</div>
Schritt 5: Den Link sorgfältig verarbeiten
Wenn der Nutzer den Link öffnet:
- Suchen Sie den Hash des Tokens, prüfen Sie, dass er nicht abgelaufen ist, und zeigen Sie das Formular für das neue Passwort. Melden Sie den Nutzer noch nicht an.
- Halten Sie den Token aus Anfragen an Dritte heraus. Fügen Sie der Reset-Seite
<meta name="referrer" content="no-referrer">hinzu und laden Sie dort keine Analyse- oder Werbeskripte, damit der Token in der URL nicht über Referrer-Header abfließt. - Beim Absenden prüfen Sie das neue Passwort gegen Ihre Passwortregeln, hashen es mit einem langsamen Algorithmus (bcrypt, scrypt oder Argon2), löschen den Token und melden alle anderen Sitzungen ab.
Schritt 6: Die Änderung bestätigen
Senden Sie nach einer Passwortänderung immer eine kurze Bestätigung:
Ihr YourApp-Passwort wurde am 28. Oktober um 14:32 UTC geändert. Wenn Sie das waren, müssen Sie nichts weiter tun. Falls nicht, sichern Sie Ihr Konto sofort.
Diese E-Mail ist die Alarmglocke des Nutzers, falls sich jemand anderes Zugang verschafft hat – lassen Sie sie also nie weg.
Sicherstellen, dass sie ankommt
Eine Reset-E-Mail im Spam-Ordner ist ein Support-Ticket. Vor dem Start:
- Richten Sie SPF, DKIM und DMARC für Ihre Absenderdomain ein,
- testen Sie mit Gmail- und Outlook-Adressen und prüfen Sie, dass die Header PASS anzeigen, und
- beobachten Sie nach dem Deployment die Rate Failed Deliveries (fehlgeschlagene Zustellungen) in Ihrem Inbixio-Dashboard.
Checkliste
- Dieselbe Antwort für bestehende und unbekannte E-Mail-Adressen
- Zufälliger 32-Byte-Token, nur sein Hash gespeichert
- 15–60 Minuten Gültigkeit, einmalige Verwendung, ein aktiver Token pro Nutzer
- Sofort gesendet von einem eigenen, authentifizierten Absender
- Klare Vorlage: ein Button, Link als Text, Gültigkeit, Zeile „Waren Sie das nicht?“
- Keine Skripte von Drittanbietern auf der Reset-Seite; Referrer deaktiviert
- Andere Sitzungen abgemeldet und Bestätigungs-E-Mail nach der Änderung gesendet
Mit Inbixio versenden
Verbinden Sie Ihren eigenen SMTP-Server, erstellen Sie einen API-Schlüssel mit passenden Berechtigungen und senden Sie aus jeder Programmiersprache mit einer einzigen HTTPS-Anfrage.