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.
§ 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 ?
- 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.
- 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.
- 03Une redirection http vers https absente, ou un en-tête HSTS manquant, ou des ressources chargées en http dans une page https.
- 04Des cookies de session sans HttpOnly, Secure ou SameSite.
- 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.
- 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 ?
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.
Questions fréquentes
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.
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.
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.
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.
Site vibe-codé : les 92 points à vérifier avant la mise en ligne
Sept listes circulent sur Instagram pour repérer un site généré par IA ou le sécuriser avant le lancement. Une fois dédoublonnées, il en reste 92 points en cinq familles. Voici la liste, et ce qu'un scan d'URL peut ou ne peut pas en vérifier.
AI Act et site web : ce qu'un site généré par IA doit afficher depuis le 2 août 2026
Le règlement européen sur l'IA n'est pas réservé aux éditeurs de modèles. Un site qui expose un chatbot ou publie des contenus générés a des obligations depuis le 2 août 2026. Les voici, avec leurs exceptions.
Page 404, FAQ, image de partage : ce que Claude Code oublie si on ne lui demande pas
Les deux listes « ce qu'il faut demander à Claude avant de lancer » se recoupent presque entièrement. Voici les vingt points, ce qu'un scan mesure, et le prompt à coller.