Aller au contenu
Skovr
Technique#sécurité#clé API#Supabase

Clé API dans le bundle : les six fuites de sécurité des sites générés par IA

Une clé secrète dans le code servi au navigateur, c'est une clé donnée à tous vos visiteurs.

John Houzi8 min de lecture

§ Pourquoi les sites générés exposent-ils des clés ?

Parce que la première version qui marche est celle où l'appel API se fait directement depuis le navigateur. L'outil lit la variable d'environnement, la compile dans le bundle JavaScript, le site fonctionne, et la clé part chez chaque visiteur. Sur Next.js, tout ce qui commence par NEXT_PUBLIC_ est public par construction ; une clé secrète nommée ainsi par commodité l'est aussi. Sur Supabase, la clé anon est faite pour être publique, mais elle ne protège rien si les règles d'accès par ligne (RLS) sont désactivées sur les tables.

§ Quelles sont les six fuites visibles de l'extérieur ?

  1. 01Une clé secrète dans le JavaScript servi : sk_live_ ou sk_test_ de Stripe, AKIA d'AWS, sk-ant- d'Anthropic, sk- d'OpenAI, une clé service_role Supabase, une clé privée PEM. Un scan lit les scripts que votre site envoie à tout le monde et y cherche ces formats.
  2. 02Un fichier sensible accessible : /.env, /.env.local, /.git/config, /.git/HEAD, /.DS_Store, /backup.sql. Un dossier .git servi permet de reconstituer tout le code source, clés comprises.
  3. 03Une redirection http vers https absente, ou un en-tête HSTS manquant, ou des ressources chargées en http dans une page https.
  4. 04Des cookies de session sans HttpOnly, Secure ou SameSite.
  5. 05Une page d'erreur bavarde : trace de pile, chemin serveur, message de base de données quand on demande une adresse inexistante ou une route API qui n'existe pas.
  6. 06Des en-têtes de sécurité absents : Content-Security-Policy, Strict-Transport-Security, X-Frame-Options ou frame-ancestors, X-Content-Type-Options, Referrer-Policy, Permissions-Policy.

§ Que faut-il vérifier soi-même, parce qu'aucun scan ne le verra ?

Neuf des verrous les plus partagés sont invisibles de l'extérieur : mots de passe hachés, droits vérifiés côté serveur et pas seulement dans l'interface, entrées validées, taille et type des fichiers envoyés contrôlés, message d'erreur unique au login (ne pas révéler si l'email existe), webhooks signés, email confirmé à l'inscription, sauvegarde automatique de la base. Deux autres ne se vérifient qu'en attaquant le site : la limite de débit sur le login, et les règles RLS avec la clé publique.

§ Comment demander la correction à votre outil ?

text
Déplace tous les appels aux API tierces (Stripe, OpenAI, Anthropic, Resend) côté serveur.
Aucune clé secrète ne doit apparaître dans le bundle client ni être préfixée NEXT_PUBLIC_.
Ajoute les six en-têtes de sécurité dans next.config, avec une CSP qui liste nos domaines.
Renvoie une vraie page 404 sans trace de pile, et une réponse JSON générique sur /api/inexistant.
Active RLS sur chaque table Supabase avec une politique par rôle, et prouve-le par un test.
Ajoute une limite de débit sur /login et sur chaque formulaire public.

Chaque ligne se vérifie ensuite. Les quatre premières de l'extérieur, avec le scan. Les deux dernières avec vous.

faq :

Questions fréquentes

La clé anon de Supabase dans le code, c'est grave ?

Non, elle est faite pour ça. Ce qui est grave, c'est une clé anon avec des tables sans RLS : n'importe qui peut alors lire ou écrire vos données. La clé service_role, elle, ne doit jamais quitter le serveur.

Une clé API Google dans le bundle, faut-il la révoquer ?

Elle est souvent légitime côté client (Maps, Fonts), à condition d'être restreinte par domaine dans la console Google. Non restreinte, elle peut servir à d'autres et vous être facturée.

Le scan Skovr enregistre-t-il les clés qu'il trouve ?

Non. Il signale le type de clé et rien d'autre. La valeur n'est ni renvoyée ni stockée. Les sondes de fichiers sensibles lisent le code de réponse et le type de contenu, jamais le contenu.

passez à la pratique

Découvrez votre score SEO + GEO en 30 secondes

Cet article a été utile ? Voyez maintenant ce que vaut votre site sur les onze critères évalués par Skovr.

à lire ensuite :