Modèle de sécurité des tokens
Les tokens L402 sont composés de deux parties jointes par: :
- Macaroon — JSON encodé en base64 contenant
{hash, exp}. Signé par SHA-256. Ne peut pas être falsifié sans connaître le preimage. - Preimage — le secret de 32 octets qui, une fois haché avec SHA-256, doit correspondre au hash intégré dans le macaroon.
Protection contre la réutilisation
l402-kit inclut une protection intégrée contre la réutilisation. Chaque preimage ne peut être utilisé qu’une seule fois :401 Token already used.
Store par défaut : Set en mémoire. Cela signifie :
- Les redémarrages vident le store de réutilisation (les tokens deviennent réutilisables après redémarrage)
- Les instances multiples ne partagent pas l’état
Expiration des tokens
Les tokens contiennent un champexp (horodatage Unix en ms). Le SDK rejette automatiquement les tokens expirés.
TTL par défaut : 1 heure (défini par le fournisseur Lightning lors de la création de la facture).
HTTPS est obligatoire
N’utilisez jamais L402 sur du HTTP simple en production. Le macaroon et le preimage sont transmis dans l’en-têteAuthorization. En HTTP, ils sont exposés aux attaquants réseau.
Limitation du débit
L402 vérifie les tokens de manière cryptographique, sans consulter de base de données — c’est donc peu coûteux. Mais la création de factures Lightning (la réponse 402) appelle l’API de votre fournisseur Lightning. Protégez la création de factures avec un limiteur de débit pour prévenir les attaques DoS :Gestion des secrets
Ne codez jamais les clés API en dur. Utilisez des variables d’environnement :.env + dotenv (ne jamais commiter dans git).
Authentification des endpoints d’administration
Si vous exposez des endpoints d’administration ou de statistiques, n’acceptez jamais les secrets via les paramètres de requête URL. Les URLs sont entièrement journalisées par les reverse proxies, les CDN et les fournisseurs cloud — y compris la chaîne de requête.Hygiène des clés Supabase
Utilisez correctementSUPABASE_SERVICE_KEY (côté serveur uniquement) et SUPABASE_ANON_KEY (sûr à exposer aux clients) :
| Clé | Utilisation | Contourne RLS ? |
|---|---|---|
anon | Extension VS Code, clients navigateur | Non |
service_role | Fonctions API côté serveur | Oui |
pro_access) doivent utiliser la clé de service — jamais la clé anon. Les politiques RLS sur les tables sensibles ne doivent pas accorder d’accès anon.
Politique de sécurité du contenu
Si vous servez un frontend avec votre API, assurez-vous que votre CSP ne bloque pas le flux L402 :Gestion des données — suppression des données utilisateur
Les utilisateurs peuvent supprimer tout leur historique de paiements et leur abonnement Pro depuis l’extension VS Code à tout moment (Paramètres → Zone de danger). L’extension appelle :- Toutes les lignes dans
paymentsoùowner_address = ? - Toutes les lignes dans
pro_accessoùaddress = ?
L’extension exige que l’utilisateur tape son adresse Lightning mot pour mot avant que le bouton de suppression soit activé — confirmation de style GitHub pour les actions destructives.
Confidentialité et minimisation des données
l402-kit est conçu pour collecter le minimum de données nécessaires à son fonctionnement. Voici ce qui est stocké, pourquoi, et comment renforcer chaque champ.Ce qui est stocké
| Table | Champ | Pourquoi | Sensibilité |
|---|---|---|---|
payments | preimage | Protection contre la réutilisation + preuve de paiement | ⚠️ Moyenne — hachez-le à la place (voir ci-dessous) |
payments | owner_address | Attribuer les revenus à l’adresse Lightning | Faible — les adresses Lightning sont publiques |
payments | amount_sats | Statistiques du tableau de bord | Faible |
payments | endpoint | Analyses par endpoint | Faible–moyenne |
pro_access | address | Vérifier l’abonnement Pro | Faible — public |
waitlist | email | Envoyer les e-mails de bienvenue et de sortie | ⚠️ Élevée — vraie PII, chiffrez ou omettez |
waitlist | lightning_address | Signal d’identité optionnel | Faible |
Hachez les preimages plutôt que de les stocker bruts
Le preimage est le secret de 32 octets qui prouve qu’un paiement Lightning a été effectué. Le stocker brut signifie qu’une fuite de base de données expose chaque preuve. Stockez le hachage SHA-256 à la place — il est déjà public (intégré dans la facture BOLT11) et suffisant pour la protection contre la réutilisation :Protéger les e-mails de la liste d’attente
Les adresses e-mail sont les seules vraies PII du système. Options par ordre de protection croissante :Prouver la propriété du portefeuille avant de supprimer des données (LNURL-auth)
L’endpoint/api/delete-data ne devrait accepter que les requêtes du véritable propriétaire de l’adresse Lightning. Utilisez LNURL-auth pour prouver la propriété de manière cryptographique — l’utilisateur signe un défi serveur avec la clé privée de son portefeuille Lightning, sans mot de passe ni compte requis :
Consultez le diagramme de flux complet pour la séquence complète avec l’état Supabase.
Cela garantit qu’aucune personne ne peut supprimer les enregistrements d’un autre utilisateur, même en connaissant son adresse Lightning.
Liste de contrôle
Avant la mise en production
Avant la mise en production
- HTTPS appliqué sur tous les endpoints
- Clés API dans des variables d’environnement, pas dans le code source
- Les endpoints d’administration/statistiques utilisent l’authentification par en-tête, pas les paramètres URL
?secret= - La clé
service_rolede Supabase utilisée côté serveur ; la cléanonuniquement sur les clients - Les tables Supabase sensibles n’ont pas de politique SELECT
anon - L’endpoint de suppression de données (
/api/delete-data) utilise la clé de service, jamais anon - Limiteur de débit sur la création de factures
- Protection contre la réutilisation testée (essayez de réutiliser un preimage → attendez-vous à un 401)
- Expiration des tokens testée (définir un TTL court en développement, confirmer le 401 après expiration)
- Les preimages stockés sous forme de hachages SHA-256, pas de secrets bruts
- Les e-mails de la liste d’attente chiffrés au repos ou supprimés après envoi
-
/api/delete-datanécessite une preuve LNURL-auth de propriété du portefeuille
Pour les APIs à fort trafic
Pour les APIs à fort trafic
- Store de réutilisation basé sur Redis (partagé entre les instances)
- Surveillance des taux de réponse 402 (pic = DoS potentiel)
- Basculement du fournisseur Lightning (BlinkProvider → repli sur LNbitsProvider)
- Surveillance de la page de statut de votre fournisseur Lightning (ex. status.blink.sv)