Token-Sicherheitsmodell
L402-Tokens bestehen aus zwei Teilen, die durch: verbunden sind:
- Macaroon — base64-kodiertes JSON mit
{hash, exp}. Signiert mit SHA-256. Kann ohne Kenntnis des preimage nicht gefälscht werden. - Preimage — das 32-Byte-Geheimnis, das nach dem Hashing mit SHA-256 mit dem im macaroon eingebetteten Hash übereinstimmen muss.
Replay-Schutz
l402-kit enthält integrierten Replay-Schutz. Jeder preimage kann nur einmal verwendet werden:401 Token already used zurück.
Standardspeicher: In-Memory-Set. Das bedeutet:
- Neustarts leeren den Replay-Speicher (Tokens werden nach Neustarts wiederverwendbar)
- Mehrere Instanzen teilen keinen gemeinsamen Zustand
Token-Ablauf
Tokens enthalten einexp-Feld (Unix-Zeitstempel in ms). Das SDK lehnt abgelaufene Tokens automatisch ab.
Standard-TTL: 1 Stunde (festgelegt vom Lightning-Provider beim Erstellen der Rechnung).
HTTPS ist erforderlich
Verwenden Sie L402 niemals über einfaches HTTP in der Produktion. Der macaroon und der preimage werden imAuthorization-Header übertragen. Über HTTP sind sie für Netzwerkangreifer sichtbar.
Ratenbegrenzung
L402 verifiziert Tokens kryptografisch, ohne eine Datenbank abzufragen — das ist kostengünstig. Die Erstellung von Lightning-Rechnungen (die 402-Antwort) ruft jedoch die API Ihres Lightning-Providers auf. Schützen Sie die Rechnungserstellung mit einem Rate-Limiter, um DoS zu verhindern:Verwaltung von Geheimnissen
Kodieren Sie niemals API-Schlüssel fest. Verwenden Sie Umgebungsvariablen:.env + dotenv (niemals in Git committen).
Authentifizierung von Admin-Endpunkten
Wenn Sie Admin- oder Statistik-Endpunkte bereitstellen, akzeptieren Sie niemals Geheimnisse über URL-Abfrageparameter. URLs werden von Reverse-Proxys, CDNs und Cloud-Anbietern vollständig protokolliert — einschließlich der Abfragezeichenfolge.Supabase-Schlüsselhygiene
Verwenden SieSUPABASE_SERVICE_KEY (nur serverseitig) und SUPABASE_ANON_KEY (sicher für Clients freigegeben) korrekt:
| Schlüssel | Verwendung | Umgeht RLS? |
|---|---|---|
anon | VS Code-Erweiterung, Browser-Clients | Nein |
service_role | Serverseitige API-Funktionen | Ja |
pro_access), müssen den Service-Schlüssel verwenden — niemals den anon-Schlüssel. RLS-Richtlinien für sensible Tabellen sollten keinen anon-Zugriff gewähren.
Content Security Policy
Wenn Sie ein Frontend zusammen mit Ihrer API bereitstellen, stellen Sie sicher, dass Ihre CSP den L402-Ablauf nicht blockiert:Datenverwaltung — Benutzerdatenlöschung
Benutzer können ihre gesamte Zahlungshistorie und ihr Pro-Abonnement jederzeit über die VS Code-Erweiterung löschen (Einstellungen → Gefahrenbereich). Die Erweiterung ruft auf:- Alle Zeilen in
payments, bei denenowner_address = ? - Alle Zeilen in
pro_access, bei denenaddress = ?
Die Erweiterung erfordert, dass der Benutzer seine Lightning-Adresse wortwörtlich eingibt, bevor die Schaltfläche zum Löschen aktiviert wird — eine GitHub-artige Bestätigung für destruktive Aktionen.
Datenschutz & Datensparsamkeit
l402-kit ist darauf ausgelegt, die minimal notwendigen Daten für den Betrieb zu erfassen. Nachfolgend finden Sie, was gespeichert wird, warum und wie Sie jedes Feld absichern können.Was gespeichert wird
| Tabelle | Feld | Warum | Sensitivität |
|---|---|---|---|
payments | preimage | Replay-Schutz + Zahlungsnachweis | ⚠️ Mittel — stattdessen hashen (siehe unten) |
payments | owner_address | Umsatz einer Lightning-Adresse zuordnen | Niedrig — Lightning-Adressen sind öffentlich |
payments | amount_sats | Dashboard-Statistiken | Niedrig |
payments | endpoint | Endpunkt-spezifische Analysen | Niedrig–Mittel |
pro_access | address | Pro-Abonnement verifizieren | Niedrig — öffentlich |
waitlist | email | Willkommens- und Release-E-Mails versenden | ⚠️ Hoch — echte personenbezogene Daten, verschlüsseln oder weglassen |
waitlist | lightning_address | Optionales Identitätssignal | Niedrig |
Preimages hashen statt roh speichern
Der preimage ist das 32-Byte-Geheimnis, das beweist, dass eine Lightning-Zahlung erfolgt ist. Wird er roh gespeichert, werden bei einem Datenbankverstoß alle Nachweise offengelegt. Speichern Sie stattdessen den SHA-256-Hash — er ist bereits öffentlich (im BOLT11-Invoice eingebettet) und für den Replay-Schutz ausreichend:Wartelisten-E-Mails schützen
E-Mail-Adressen sind die einzigen echten personenbezogenen Daten im System. Optionen in aufsteigender Schutzstärke:Wallet-Eigentümerschaft vor dem Löschen von Daten nachweisen (LNURL-auth)
Der/api/delete-data-Endpunkt sollte nur Anfragen vom tatsächlichen Eigentümer der Lightning-Adresse akzeptieren. Verwenden Sie LNURL-auth, um die Eigentümerschaft kryptografisch nachzuweisen — der Benutzer signiert eine Server-Challenge mit dem privaten Schlüssel seines Lightning Wallets, ohne Passwort oder Konto:
Sehen Sie sich das vollständige Ablaufdiagramm für die vollständige Sequenz mit dem Supabase-Zustand an.
Dadurch wird sichergestellt, dass niemand die Datensätze eines anderen Benutzers löschen kann, selbst wenn er die Lightning-Adresse kennt.
Checkliste
Vor dem Go-Live
Vor dem Go-Live
- HTTPS auf allen Endpunkten erzwungen
- API-Schlüssel in Umgebungsvariablen, nicht im Quellcode
- Admin-/Statistik-Endpunkte verwenden Header-Auth, keine
?secret=-URL-Parameter - Supabase
service_role-Schlüssel serverseitig verwendet;anon-Schlüssel nur auf Clients - Sensible Supabase-Tabellen haben keine
anon-SELECT-Richtlinie - Datenlöschungs-Endpunkt (
/api/delete-data) verwendet Service-Schlüssel, niemals anon - Rate-Limiter für die Rechnungserstellung
- Replay-Schutz getestet (preimage wiederverwenden versuchen → 401 erwarten)
- Token-Ablauf getestet (kurze TTL in der Entwicklung setzen, 401 nach Ablauf bestätigen)
- Preimages als SHA-256-Hashes gespeichert, nicht als rohe Geheimnisse
- Wartelisten-E-Mails im Ruhezustand verschlüsselt oder nach dem Versenden verworfen
-
/api/delete-dataerfordert LNURL-auth-Nachweis der Wallet-Eigentümerschaft
Für APIs mit hohem Datenverkehr
Für APIs mit hohem Datenverkehr
- Redis-basierter Replay-Speicher (instanzübergreifend geteilt)
- Überwachung der 402-Antwortrate (Anstieg = möglicher DoS)
- Lightning-Provider-Failover (BlinkProvider → LNbitsProvider-Fallback)
- Statusseiten-Überwachung für Ihren Lightning-Provider (z. B. status.blink.sv)