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:
Serverseitige Cloudflare Workers, die sensible Tabellen lesen (z. B.
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
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)