Sécuriser une application créée avec l'IA (Lovable, Bolt, Cursor)

Antoine Auffray

12/06/2026

Votre application fonctionne, vos premiers utilisateurs l'adorent. Sous le capot, pourtant, le code généré par l'IA cache souvent des failles béantes. Un rapport publié en 2025 chiffre à 45 % la part du code généré par IA qui contient des vulnérabilités. Tant que vous manipulez de vraies données (emails, mots de passe, paiements, données personnelles), ces failles sont une bombe à retardement.

Ce guide vous montre comment sécuriser une application créée avec Lovable, Bolt.new, Cursor ou V0, même sans être expert. On part des failles les plus fréquentes, on les corrige dans le bon ordre, et on les rattache aux standards de sécurité reconnus. L'objectif : que vous lanciez sans laisser une porte grande ouverte.


Pourquoi le code généré par IA est vulnérable par défaut

Le code généré par IA est vulnérable parce que les outils de vibe coding sont optimisés pour produire quelque chose qui fonctionne, pas quelque chose qui résiste à une attaque. La sécurité n'est jamais le critère par défaut d'un prompt comme « crée-moi une app de réservation ». Le résultat marche en démo, mais laisse de côté tout ce qui protège vos données.

Trois mécanismes expliquent ce phénomène. D'abord, l'IA apprend de millions d'exemples publics, dont beaucoup sont des tutoriels simplifiés où la sécurité a justement été retirée pour aller à l'essentiel. Ensuite, elle ne connaît pas votre contexte de risque : elle ignore que cette table contiendra des données médicales ou que cet endpoint encaissera des paiements. Enfin, l'effet de volume joue contre vous. L'outil génère des milliers de lignes en quelques minutes, bien plus vite que quiconque ne peut les relire. Vous accumulez donc du code que personne n'a audité, et chaque ligne non vérifiée est une faille potentielle. Ce déséquilibre est analysé plus largement dans notre article sur les limites du vibe coding en production.


Les 7 failles de sécurité les plus courantes des apps vibe-codées

Avant de corriger, il faut savoir où regarder. Ces sept failles reviennent dans la quasi-totalité des prototypes générés par IA que nous auditons.

  1. Secrets et clés API exposés côté client. La clé secrète Stripe, le token OpenAI ou la clé service_role de Supabase se retrouvent dans le code envoyé au navigateur. N'importe qui peut les extraire en quelques secondes, puis encaisser des paiements ou vider votre quota d'API à votre place.

  2. Aucune autorisation côté serveur. Sur Supabase, la Row Level Security (RLS, le mécanisme qui décide qui a le droit de lire ou modifier chaque ligne) est souvent désactivée. Résultat : un utilisateur peut lire ou modifier les données de tous les autres en manipulant une simple requête.

  3. Entrées utilisateur non validées. Quand les champs d'un formulaire ne sont ni vérifiés ni assainis, ils ouvrent la voie aux injections SQL (manipuler la base via un champ texte) et aux attaques XSS (injecter du code malveillant exécuté dans le navigateur d'autres utilisateurs).

  4. Authentification factice ou contournable. L'app affiche bien un écran de connexion, mais la vérification se fait uniquement côté navigateur. Un utilisateur un peu curieux contourne l'écran et accède aux pages protégées sans jamais s'authentifier réellement.

  5. Endpoints et tables ouverts au public. L'API ou la base répond à tout le monde, sans contrôle. On peut alors aspirer l'intégralité des données, voire en écrire.

  6. Absence de limitation de débit. Sans rate limiting (un plafond du nombre d'appels autorisés par utilisateur et par minute), vos endpoints sont exposés au scraping massif, aux abus, et à une facture d'API qui explose en une nuit.

  7. Dépendances vulnérables ou non maintenues. Le projet embarque des bibliothèques obsolètes contenant des failles connues, jamais mises à jour depuis la génération initiale.


Ce qu'une seule de ces failles peut coûter

Une faille de sécurité n'a rien d'abstrait, et ses conséquences se mesurent en argent, en temps et en réputation. Une clé API exposée se traduit par une facture qui grimpe pendant que des inconnus consomment votre quota. Une RLS désactivée, c'est l'ensemble de votre base de données potentiellement aspirée, donc une fuite de données personnelles à déclarer, avec les obligations RGPD qui l'accompagnent. Une authentification contournable, c'est un utilisateur qui accède au compte d'un autre.

Le point commun de ces incidents : ils surviennent presque toujours au pire moment, le jour où l'application commence enfin à attirer du monde. Plus vous avez d'utilisateurs, plus la surface exposée intéresse les robots qui scannent le web en permanence à la recherche de clés et d'endpoints ouverts. Investir dans la sécurité avant ce moment coûte une fraction du prix d'un incident une fois qu'il a eu lieu.


Comment sécuriser votre application étape par étape

La règle d'or : traiter les failles dans l'ordre du risque, en commençant par ce qui peut vous coûter de l'argent ou des données dès aujourd'hui. Voici la marche à suivre pour sécuriser une application vibe-codée.

  1. Auditer et déplacer les secrets. Recensez toutes les clés présentes dans le code front. Déplacez-les vers des variables d'environnement côté serveur, et surtout révoquez puis régénérez immédiatement celles qui ont été exposées : une clé qui a circulé dans un bundle public est déjà compromise. Attention à ne pas confondre les deux familles de clés : certaines sont publiques par conception (la clé anon de Supabase, la clé publishable de Stripe) et peuvent vivre côté navigateur, d'autres sont strictement secrètes (la clé service_role, la clé secrète Stripe, les tokens d'API) et ne doivent jamais quitter le serveur. La confusion entre les deux est l'erreur la plus fréquente des projets vibe-codés.

  2. Activer l'autorisation côté serveur. Sur Supabase, activez la RLS sur chaque table et écrivez des policies explicites (chaque utilisateur n'accède qu'à ses propres données). Sur un backend sur mesure, placez ces contrôles dans des guards côté serveur, jamais côté client.

  3. Valider et assainir toutes les entrées. Définissez un schéma de validation pour chaque donnée entrante, par exemple avec Zod. Utilisez des requêtes paramétrées plutôt que de construire vos requêtes par concaténation, et échappez systématiquement les contenus affichés pour neutraliser le XSS. Retenez un principe simple : la validation côté navigateur sert le confort de l'utilisateur, jamais la sécurité. Un attaquant ne passe pas par votre formulaire, il appelle directement votre API. Toute vérification qui protège vos données doit donc exister côté serveur, où elle ne peut pas être contournée.

  4. Mettre une vraie authentification. La vérification doit se faire côté serveur, avec des sessions ou des jetons signés (JWT), des mots de passe hachés, et idéalement une double authentification (MFA) si vos données sont sensibles. Des solutions comme Supabase Auth, Clerk ou Auth.js gèrent ce socle proprement. L'authentification et l'autorisation sont d'ailleurs indissociables du backend : si vous devez encore ajouter une vraie base de données et une API à votre prototype, traitez les deux chantiers ensemble.

  5. Verrouiller la base et les endpoints. Fermez les accès publics par défaut, appliquez le principe du moindre privilège (chaque rôle n'a que les droits strictement nécessaires) et n'exposez que ce qui doit l'être.

  6. Ajouter une limitation de débit et des journaux. Protégez vos endpoints sensibles par un rate limiting, et activez des logs pour détecter les comportements anormaux avant qu'ils ne deviennent un incident.

  7. Mettre à jour les dépendances. Lancez un audit de vos paquets, mettez à jour les bibliothèques vulnérables et supprimez le code mort qui élargit inutilement la surface d'attaque.

Faites-le dans cet ordre. Un mot de passe non haché est grave, mais une clé Stripe exposée vous coûte de l'argent dès maintenant.


Le réflexe OWASP : la checklist minimale avant de lancer

L'OWASP Top 10 est la liste de référence des risques de sécurité applicative les plus répandus, maintenue par une fondation indépendante. La plupart des failles d'une app vibe-codée tombent dans trois de ses catégories : le contrôle d'accès défaillant (broken access control), les injections, et les défauts liés aux secrets et au chiffrement (cryptographic failures). C'est le cadre que nous appliquons systématiquement avant toute mise en production.

Voici la checklist minimale à cocher avant de lancer :

  • Aucune clé secrète n'est présente dans le code envoyé au navigateur
  • Les clés exposées par le passé ont été révoquées et régénérées
  • La RLS (ou équivalent serveur) est active sur toutes les tables
  • Chaque entrée utilisateur est validée par un schéma
  • L'authentification est vérifiée côté serveur, mots de passe hachés
  • Les accès publics à la base et aux endpoints sont fermés
  • Un rate limiting protège les endpoints sensibles
  • Les dépendances ont été auditées et mises à jour

Si une seule case reste vide sur une application qui manipule de vraies données, le lancement est prématuré.


Le faire soi-même ou le faire auditer ?

Prenons un cas réel et fréquent. Un fondateur lance son app Lovable un lundi, sans avoir touché à la RLS ni sorti sa clé API du front. Le mercredi, il découvre une facture d'API à quatre chiffres : un script a trouvé la clé exposée et l'a exploitée en boucle. Le problème n'était pas visible depuis l'interface, qui fonctionnait parfaitement. C'est toute la difficulté de la sécurité : les failles ne se voient pas en utilisant l'application, elles se voient en lisant le code.

Vous pouvez appliquer vous-même les premières étapes de ce guide, surtout l'audit des secrets, qui est à la portée de tout fondateur un peu technique. Pour le reste (RLS fine, validation systématique, authentification serveur), un regard expert révèle en quelques jours ce qu'on ne voit pas soi-même.

C'est exactement là que se situe le risque du « je verrai ça plus tard » : la sécurité n'est pas une fonctionnalité visible qu'on coche en démo, c'est un travail de fond qui ne se remarque que le jour où il manque. Un développeur senior sait quoi chercher parce qu'il a déjà vu les mêmes failles des dizaines de fois, et parce qu'il connaît les patterns que chaque outil de vibe coding génère. C'est précisément ce que couvre notre audit : nous reprenons votre code, identifions les failles, les hiérarchisons par gravité et les corrigeons sans tout reconstruire. La manière dont nous intégrons la sécurité à chaque étape de notre production est détaillée dans cet article sur nos process IA. Et si vous voulez un diagnostic direct, faites auditer gratuitement votre projet.


Questions fréquentes

Le code de Bolt.new ou Lovable est-il sécurisé ?

Il est fonctionnel, mais rarement sécurisé par défaut. Ces outils privilégient la vitesse de prototypage à la robustesse. Le code généré constitue une bonne base de départ, à condition de l'auditer et de combler les failles avant toute mise en production avec de vraies données.

Supabase est-il sécurisé par défaut ?

Supabase fournit les bons outils, dont la Row Level Security, mais encore faut-il les activer et les configurer. Beaucoup de prototypes générés par IA laissent la RLS désactivée, ce qui rend toutes les données accessibles. La sécurité dépend donc de la configuration, pas seulement de la plateforme.

Mes clés API sont-elles exposées si j'ai vibe-codé mon app ?

Souvent, oui. Vérifiez si des clés secrètes (Stripe, OpenAI, la clé service_role de Supabase) apparaissent dans le code chargé par le navigateur. Si c'est le cas, considérez-les comme compromises, révoquez-les et déplacez-les côté serveur.

Combien coûte un audit de sécurité d'une application IA ?

Le coût dépend de la taille du projet et du nombre de failles. Chez nous, le premier audit est gratuit : il identifie les risques et chiffre précisément la remise en sécurité, souvent réalisable sans reconstruction complète.

Peut-on sécuriser une application sans la reconstruire entièrement ?

Dans la grande majorité des cas, oui. La plupart des failles se corrigent en renforçant l'existant : déplacer les secrets, activer l'autorisation, valider les entrées, durcir l'authentification. L'interface et la logique métier sont généralement conservées.


Conclusion

La sécurité d'une application vibe-codée n'est pas une option dès l'instant où de vraies données sont en jeu. Retenez l'essentiel : les secrets exposés sont l'urgence absolue, l'autorisation serveur et la validation des entrées viennent ensuite, et le cadre OWASP donne la liste à cocher avant de lancer. Côté budget, rassurez-vous : sécuriser un prototype ne veut presque jamais dire le reconstruire.

La première étape reste de savoir où vous en êtes vraiment. Faites auditer gratuitement votre code : vous saurez quelles failles sont présentes, lesquelles sont critiques, et combien coûte leur correction.

Lectures complémentaires :

Prêt à vous lancer ?

La newsletter qu'on n'ignore pas

Abonnez-vous à notre newsletter pour recevoir nos derniers articles, retours d'expérience et conseils tech directement dans votre boîte mail.

Désinscription en un clic. Vos données restent privées.