📐 Sécurité & Conformité
Modèle de sécurité
Couches de protection
Utilisateur
↓
[HTTPS/TLS] — transport chiffré
↓
[Supabase Auth] — JWT + session
↓
[Edge Functions] — validation des entrées
↓
[PostgreSQL RLS] — isolation par user_id
↓
[Données] — stockage chiffré at-rest (Supabase)
Authentification
JWT Supabase
- Tokens JWT signés par Supabase, durée de vie configurable
- Auto-refresh via
autoRefreshToken: true - Stockage dans
localStorageavecpersistSession: true - Révocation possible depuis le dashboard Supabase
Providers supportés
| Provider | Statut |
|---|---|
| Email / Mot de passe | ✅ Actif |
| Google OAuth | ✅ Actif |
| GitHub | 🗓️ Prévu Q2 2026 |
| SSO SAML/OIDC | 🗓️ Prévu Q4 2026 (Enterprise) |
Dette technique — verify_jwt = false
Les Edge Functions acceptent actuellement les requêtes sans JWT valide. Migration prévue Q2 2026 lors du déploiement de l'API v1.
Row Level Security (RLS)
Le RLS PostgreSQL garantit l'isolation complète des données :
- Chaque utilisateur ne peut lire, modifier et supprimer que ses propres données
- La politique s'applique via
auth.uid() = user_id - Impossible de contourner même avec un accès direct à la DB
community_reports: lecture partagée, écriture isolée parreporter_id
Voir le détail complet dans DATABASE.md.
Gestion des clés API
Clés utilisateur (frontend)
Les clés API (IPQualityScore, AbuseIPDB, VirusTotal) saisies dans les Paramètres sont stockées dans localStorage du navigateur.
- Elles ne transitent que lors des appels à
analyze-email-headers - Elles ne sont jamais stockées dans la base de données Supabase
- Elles ne sont jamais transmises à des tiers autres que le service concerné
Secrets serveur (Edge Functions)
Les secrets serveur sont configurés dans le dashboard Supabase et accessibles uniquement depuis les Edge Functions (variable d'environnement Deno).
Validation des entrées
Côté frontend
- Zod pour la validation des formulaires (React Hook Form)
- Nettoyage des inputs avant envoi aux Edge Functions
Côté Edge Functions
- Validation de présence des champs obligatoires
- Rejet avec HTTP 400 si données manquantes ou invalides
- Normalisation des numéros de téléphone avant matching
⚠️ La validation côté serveur est partielle dans le MVP. Renforcement prévu Q2 2026.
Limitation de requêtes
Système de crédits (frontend)
- 5 analyses/jour par utilisateur
- Stocké en
localStorage(contournable — dette technique) - Migration vers table DB prévue Q2 2026 (incontournable)
Rate limiting API (prévu Q2 2026)
- Table
user_quotasen PostgreSQL - 100 req/min, 10 000/jour pour l'API v1
- Réponse HTTP 429 si quota dépassé
Conformité RGPD
Principes appliqués
| Principe | Implémentation |
|---|---|
| Minimisation | Seuls les headers email et numéros sont traités (pas les corps d'email) |
| Finalité | Données utilisées exclusivement pour l'analyse de sécurité |
| Transparence | Documentation complète du traitement |
| Isolation | RLS PostgreSQL + suppression en cascade |
| Hébergement souverain | Supabase EU (France/Union Européenne) |
| Pas de revente | Aucune donnée transmise à des tiers sans consentement |
| Droit à l'effacement | Suppression compte → suppression cascade de toutes les données |
Données traitées
| Donnée | Finalité | Conservation |
|---|---|---|
| Adresse email (compte) | Authentification | Durée du compte |
| En-têtes email | Analyse de sécurité | Jusqu'à suppression manuelle |
| Numéros de téléphone | Vérification ARCEP | Jusqu'à suppression manuelle |
| IP des emails analysés | Réputation/sécurité | Jusqu'à suppression manuelle |
Données NON collectées
- Corps des emails (uniquement les headers)
- Pièces jointes
- Données de navigation (pas de cookies traceurs)
- Données biométriques
Responsable du traitement
Fondateur du projet BlocMail & BlocNumEtSMS
Contact : contact.seb205@gmail.com
DPO désigné : Q2 2026
Hébergement et souveraineté
| Composant | Hébergeur | Localisation |
|---|---|---|
| Frontend | Lovable Cloud / Vercel | UE |
| Base de données | Supabase EU | France / UE |
| Edge Functions | Supabase Deno | UE |
| Auth | Supabase Auth | UE |
Sécurité des exports et webhooks
- Les exports (JSON, CSV, XML) sont générés côté client et téléchargés directement
- Les webhooks n8n/Make ne sont déclenchés que par action explicite de l'utilisateur
- Aucune donnée n'est transmise sans action volontaire
- Les URLs de webhooks sont stockées localement (localStorage), non en DB
Roadmap sécurité
| Priorité | Action | Échéance |
|---|---|---|
| 🔴 Critique | verify_jwt = true sur les Edge Functions | Q2 2026 |
| 🔴 Critique | Crédits quotidiens en DB (incontournables) | Q2 2026 |
| 🟠 Haute | 2FA / MFA pour comptes Premium/PME | Q2 2026 |
| 🟠 Haute | Rate limiting serveur (table user_quotas) | Q2 2026 |
| 🟡 Moyenne | Audit logs (journalisation actions RGPD) | Q2 2026 |
| 🟡 Moyenne | Politique de rétention auto (> 90 jours) | Q3 2026 |
| 🟢 Basse | Chiffrement AES des exports CSV/JSON | Q3 2026 |
| 🟢 Basse | Audit de sécurité externe + certification ISO 27001 | 2027+ |