N’ouvrez pas d’issue publique pour un problème de sécurité.
Contactez les mainteneurs en privé via le profil GitHub Probe311 (ou l’email listé sur le profil) avec :
- description du problème
- étapes de reproduction
- impact estimé
- correctif proposé si vous en avez un
- Ne jamais committer
.env,.env.local, ni de clés API réelles. - Utiliser frontend/.env.example comme modèle (placeholders uniquement).
SUPABASE_SERVICE_ROLE_KEY: CLI / seeds / serveur uniquement — jamais préfixeVITE_.- Toute variable
VITE_*est injectée dans le bundle navigateur : ne pas y mettre de secrets que vous ne voulez pas exposer. - Secrets Edge Functions (
GEMINI_API_KEY,RESEND_API_KEY,CORS_ALLOWED_ORIGINS, etc.) : dashboard Supabase → Project Settings → Edge Functions → Secrets. - Interdit côté client :
VITE_GEMINI_API_KEY,VITE_FREESOUND_CLIENT_SECRET, service_role, Resend, OAuth client secrets.
Des JWT Supabase (anon + service_role) ont figuré dans d’anciens commits (supabase/APPLY_MIGRATION.md, supabase/seed.ps1, docs/VERCEL_SETUP.md), projet ref obsatctfkwanwxextiyz. Même après nettoyage de main, l’historique public les expose encore.
Checklist humaine (dashboard) :
- Dashboard Supabase → Project Settings → API → Reset / régénérer
service_roleetanon(projet actuellyyqfkxuwlwbaudxjtzs+ ancien projet si encore actif). - Mettre à jour Vercel (
VITE_SUPABASE_URL,VITE_SUPABASE_ANON_KEY) + secrets Edge +.env.local. - Redeploy frontend + redeploy Edge Functions.
- Vérifier Auth / logs pour activité suspecte.
- Optionnel : purge d’historique (
git filter-repo) puisgit push --force(coordonner les forks).
Tant que la rotation n’est pas faite sur l’ancien projet exposé, considérez-le compromis.
- Auth : Supabase Auth (hash côté serveur).
- Session client :
localStorage(webamp-auth) + PKCE — XSS = vol de session → sanitize + CSP. - Domaines : LP
https://webamp.studio· apphttps://app.webamp.studio. - Entrée LP → app : deep-link
https://app.webamp.studio/?auth=login(aucun token dans l’URL). Pas de sous-domainelogin./oauth.: l’auth vit sur l’origine app (Supabase PKCE + localStorage). Un bridge dédié ne sert que pour SSO cookie multi-apps / OAuth centralisé — hors scope actuel. - Site URL Auth (dashboard) =
https://app.webamp.studio - Reset MDP :
resetPasswordForEmail→ redirect/?auth=recovery. Redirect URLs allowlist :https://app.webamp.studio/**http://localhost:10000/**- durée du lien ≤ 1 h ; Leaked password protection (HaveIBeenPwned)
- MDP app : score ≥ 70 à l’inscription ; min 12 caractères au changement.
- Edge
CORS_ALLOWED_ORIGINS:https://app.webamp.studio,http://localhost:10000(pas la LP).
- UI :
VITE_ADMIN_UUIDou RPCis_admin()(useIsAdmin). - Écritures catalogue : RLS
is_admin()uniquement. - Seed :
INSERT INTO public.user_roles (user_id, role)
VALUES ('YOUR_AUTH_UUID', 'admin')
ON CONFLICT (user_id) DO UPDATE SET role = 'admin';- Toutes les fonctions
ai-*exigent un JWT utilisateur (+ rate-limit). ai-gemini: admin only (proxy Gemini, clé serveur).contact-support: public + rate-limit IP + validation champs.- Définir
CORS_ALLOWED_ORIGINS(origines prod séparées par des virgules).
- Bucket
ir: owner-only policies,file_size_limit50 Mo, mime audio. - Import URL : HTTPS only, anti-SSRF hosts privés.
npm run audit/ Dependabot (.github/dependabot.yml)npm run security:sanitize-selfcheck- Rapport : docs/SECURITY_AUDIT_REPORT.md
- Créer votre propre projet Supabase
- Régénérer / utiliser vos propres clés API tierces
- Révoquer toute clé qui aurait fuité dans un commit (historique Git inclus)
- Définir
CORS_ALLOWED_ORIGINS
- Contributions : CONTRIBUTING.md · CODE_OF_CONDUCT.md
- Protection
main/ labels : docs/GITHUB_BRANCH_PROTECTION.md