Votre application envoie des courriels, encaisse des paiements, interroge un service de cartographie ou appelle un modèle d’intelligence artificielle. Pour chacun de ces services, elle détient une clé, une longue suite de caractères qui prouve que c’est bien vous. Cette clé fonctionne comme un moyen de paiement : celui qui la détient peut consommer à votre place.

Dans les applications produites par les outils de génération, ces clés se retrouvent très souvent au mauvais endroit.

Le mauvais endroit, concrètement

Une application web se compose de deux moitiés. Le code qui part dans le navigateur du visiteur, et le code qui reste sur un serveur auquel personne n’a accès. Tout ce qui part dans le navigateur est lisible : il suffit d’ouvrir les outils de développement du navigateur, présents dans Chrome et Firefox depuis toujours, pour parcourir ce qui a été envoyé.

Une clé posée dans cette première moitié est donc publique. Elle ne l’est pas au sens où quelqu’un l’aurait volée, elle l’est parce qu’elle a été distribuée à chaque personne ayant ouvert la page.

Les outils de génération produisent naturellement du code destiné au navigateur, puisque c’est là que vit l’interface. Quand vous leur demandez d’ajouter l’envoi d’un courriel ou un paiement, ils placent l’appel là où ils travaillent déjà. Le résultat fonctionne parfaitement, ce qui est précisément le problème : rien ne signale l’erreur.

Ce qui se passe ensuite

Des programmes parcourent en permanence le web à la recherche de ces chaînes de caractères. Les clés des grands services ont un format reconnaissable, et il existe des outils dont c’est la seule fonction.

Les conséquences varient selon le service. Une clé d’envoi de courriels sert à expédier du courrier indésirable depuis votre nom de domaine, ce qui abîme durablement votre réputation d’expéditeur et finit par envoyer vos vrais messages en indésirable chez vos clients. Une clé d’accès à un modèle d’intelligence artificielle se consomme en factures qui montent vite. Une clé de service de paiement donne accès à vos transactions.

Le cas le plus grave reste la clé d’administration de la base de données. Celle-là contourne toutes les règles d’accès, y compris celles qui ont été correctement posées, et la documentation de Supabase précise qu’elle ne doit jamais toucher au code du navigateur.

Distinguer les clés publiques des autres

Toutes les clés ne sont pas des secrets, et confondre les deux mène à des corrections inutiles. Certains services distribuent délibérément une clé destinée au navigateur, conçue pour être vue. La clé publique de Supabase entre dans cette catégorie, tout comme les clés publiques des services de paiement, qui commencent généralement par une mention explicite.

Ces clés publiques sont sans danger, à une condition : que la protection prévue derrière soit en place. Une clé publique de base de données sans politique d’accès équivaut à une porte ouverte, ce que la faille CVE-2025-48757 a rendu visible en 2025 sur plus de 170 applications produites avec Lovable.

La règle pratique : si la documentation du service parle de clé secrète, de clé privée ou de clé de service, elle n’a rien à faire dans le navigateur.

Comment vérifier en cinq minutes

Ouvrez votre application dans Chrome ou Firefox. Appuyez sur la touche F12 pour afficher les outils de développement, puis ouvrez l’onglet des sources. Utilisez la recherche globale et tapez les préfixes usuels : sk_, secret, api_key, service_role, password.

Regardez aussi l’onglet réseau pendant que vous utilisez l’application. Chaque appel sortant y figure, avec ses en-têtes. Une clé transmise depuis le navigateur vers un service tiers y apparaît en clair.

Si vous trouvez quelque chose, notez-le sans le publier ailleurs, et considérez cette clé comme compromise.

La correction, en trois temps

Révoquer d’abord. Une clé exposée reste valable tant qu’elle n’est pas révoquée, et personne ne sait qui l’a déjà relevée. On la remplace avant tout le reste. Cette étape se fait dans le tableau de bord du service concerné et prend quelques minutes.

Déplacer l’appel ensuite. Le service n’est plus appelé depuis le navigateur mais depuis un point d’entrée sur le serveur, qui détient la clé et que le navigateur ne peut pas lire. L’écran demande au serveur, le serveur appelle le service. Le comportement visible reste identique.

Vérifier enfin. On refait la recherche dans le code envoyé au navigateur, et on regarde l’historique de consommation du service pour repérer un usage anormal antérieur à la révocation.

Un point souvent oublié : si le code de votre projet est stocké dans un dépôt, la clé y figure aussi dans l’historique, même après avoir été retirée du fichier. Le nettoyage de l’historique fait partie du travail.

Les clés ne sont pas les seuls secrets qui fuient

Le même défaut touche d’autres informations, moins évidentes.

Les chaînes de connexion. Une adresse de base de données contenant identifiant et mot de passe, posée dans le code du navigateur, donne un accès direct et complet.

Les secrets de notification. Quand un service extérieur prévient votre application qu’un paiement a abouti, un secret partagé permet de vérifier que le message vient bien de lui. Sans cette vérification, ou avec un secret exposé, n’importe qui peut annoncer un paiement qui n’a jamais eu lieu.

Les comptes de test restés actifs. Un compte administrateur créé pendant le développement, avec un mot de passe simple, survit souvent à la mise en ligne.

Les adresses internes. Un point d’entrée d’administration accessible sans authentification parce qu’il était pratique pendant les essais reste accessible après.

Aucun de ces défauts ne se voit à l’usage normal de l’application, et c’est ce qui les rend durables.

Ce que nous faisons

Nous parcourons le code de votre application, nous établissons la liste des clés exposées et de ce que chacune permet, et nous vous la remettons en français avec le niveau d’urgence de chaque cas.

Nous déplaçons ensuite les appels concernés côté serveur, avec un devis à prix fixe établi sur le périmètre que vous validez. La révocation reste entre vos mains, sur vos comptes, et nous vous indiquons précisément où cliquer.