Passwort-zurücksetzen-E-Mails, denen Nutzer vertrauen – und die ankommen

So bauen Sie einen sicheren Passwort-Reset: Einmal-Tokens, kurze Gültigkeit, keine Konto-Enumeration, eine klare E-Mail-Vorlage und eine Bestätigung nach der Änderung.

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

  1. Der Nutzer gibt auf der Seite Passwort vergessen seine E-Mail-Adresse ein.
  2. Ihre App zeigt immer dieselbe Meldung, ob das Konto existiert oder nicht.
  3. Existiert es, erstellen Sie einen Einmal-Token und senden einen Reset-Link per E-Mail.
  4. Der Nutzer öffnet den Link, wählt ein neues Passwort, und der Token ist verbraucht.
  5. 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>

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.

Konto erstellen Preise ansehen