Non, une application générée avec Bolt.new n'est pas prête pour la production sans un audit de sécurité préalable. Si la technologie WebContainers de StackBlitz permet de faire tourner un environnement Node.js complet dans le navigateur pour prototyper à une vitesse stupéfiante, le code produit par l'IA souffre des mêmes vulnérabilités que tous les outils de vibe coding : tables Supabase sans Row Level Security (RLS), clés d'API exposées lors du passage en production, webhooks de paiement non authentifiés et absence totale de limitation de débit (rate limiting).
Pour déployer en toute sécurité un SaaS conçu sur Bolt.new, vous devez impérativement séparer l'environnement d'émulation du navigateur de votre infrastructure de production réelle, verrouiller vos politiques de base de données PostgreSQL, et isoler vos clés secrètes dans un véritable backend serveur.
L'illusion des WebContainers
Dans Bolt.new, votre serveur Node.js tourne virtuellement à l'intérieur d'un onglet de votre navigateur (WebAssembly). Ce fonctionnement local masque souvent le fait qu'une fois déployé sur Vercel ou Netlify, votre code devient exposé aux requêtes publiques du monde entier.
Comment fonctionne l'environnement technique de Bolt.new ?
Développé par les équipes de StackBlitz, Bolt.new s'appuie sur une prouesse technique appelée WebContainers.
Contrairement aux générateurs qui créent de simples interfaces statiques, Bolt.new peut exécuter un terminal, installer des dépendances NPM et lancer des serveurs backend (Next.js, Remix, Astro, Vite, Fastify) directement dans la mémoire de votre navigateur via WebAssembly.
Cependant, cette architecture introduit une confusion majeure chez de nombreux créateurs :
- En phase de création sur Bolt.new : tout s'exécute dans une sandbox locale et isolée au sein de votre navigateur.
- En phase de déploiement (Vercel, Netlify, Supabase) : l'application est compilée et exposée publiquement sur Internet. Les secrets mal isolés et les routes API sans authentification deviennent immédiatement accessibles à n'importe quel attaquant.
Les 5 failles critiques d'un projet généré sur Bolt.new
Lorsqu'un créateur demande à Bolt de concevoir un SaaS complet avec base de données et paiements, l'IA génère fréquemment cinq vulnérabilités architecturales.
1. La confusion entre variables d'environnement serveur et client
Dans l'émulateur Bolt.new, le fichier .env semble fonctionner de manière transparente. Mais lorsque vous exportez le projet vers GitHub ou que vous le déployez sur un hébergeur comme Vercel :
- Les variables destinées au backend sont parfois accidentellement préfixées par
VITE_ouNEXT_PUBLIC_par l'IA pour "résoudre rapidement" une erreur de lecture dans un composant. - Dès lors, vos clés privées (Stripe Secret Key, Resend API Key, Supabase Service Role) sont injectées dans le code JavaScript téléchargé par vos utilisateurs.
Si vous avez un doute sur vos clés après un export depuis Bolt, suivez notre guide pour détecter une clé API exposée.
2. Des bases Supabase créées sans Row Level Security (RLS)
Bolt.new s'intègre naturellement avec Supabase pour persister les données. Pour que le prototype fonctionne sans friction, l'agent IA génère souvent des scripts SQL de création de tables en omettant délibérément la commande ALTER TABLE ... ENABLE ROW LEVEL SECURITY;.
Sans cette directive, n'importe quel internaute possédant votre clé publique anon (visible dans le frontend) peut interroger directement l'API REST de Supabase et télécharger la totalité de vos utilisateurs ou modifier les enregistrements d'autres comptes.
Ce problème est identique à celui rencontré lors de la sécurisation d'une application Lovable.
3. Des webhooks de paiement non vérifiés
Pour gérer les abonnements Stripe ou Lemon Squeezy, Bolt.new génère une route d'API backend (ex: /api/webhooks/stripe).
Faute de pouvoir tester facilement les signatures cryptographiques locales dans l'environnement du navigateur, l'IA écrit fréquemment un code simplifié qui lit directement le payload JSON sans valider l'en-tête stripe-signature :
// DANGEREUX : Généré fréquemment par Bolt.new
export async function POST(req: Request) {
const event = await req.json(); // Aucune vérification HMAC !
if (event.type === 'checkout.session.completed') {
await upgradeUserToPremium(event.data.object.customer_email);
}
return new Response('OK');
}
N'importe quel visiteur peut envoyer une requête POST falsifiée avec l'adresse email de son choix pour obtenir gratuitement un abonnement payant à vie.
4. L'absence de Rate Limiting sur les routes consommatrices d'IA
Si votre SaaS propose une fonctionnalité d'intelligence artificielle (génération de texte, transcription, analyse d'image), Bolt.new crée une route d'API qui appelle directement OpenAI ou Anthropic.
Sans rate limiting (limite de requêtes par IP ou par utilisateur) ni vérification de session stricte, des bots de scraping automatisés peuvent bombarder votre endpoint et épuiser vos crédits d'API en quelques minutes, illustrant parfaitement pourquoi un SaaS consomme des APIs sans utilisateurs réels.
5. L'obésité des dépendances et les paquets vulnérables
Pour construire vite, Bolt.new installe massivement des bibliothèques NPM. L'IA a tendance à choisir des paquets anciens ou des bibliothèques volumineuses qui augmentent la surface d'attaque du projet et ralentissent considérablement les temps de chargement en production.
Ce que Bolt.new sécurise vs ce que vous devez auditer
- Bolt.new sécurise : L'isolation de la sandbox in-browser pendant vos tests dans l'éditeur.
- Bolt.new NE sécurise PAS : Les autorisations en base de données, la signature des webhooks, la gestion des sessions utilisateur, ni la protection contre le déni de service financier.
Guide d'audit : préparer un projet Bolt.new pour la production
Avant de promouvoir publiquement une application issue de Bolt.new, appliquez cette procédure en 4 étapes.
Étape 1 : Auditer l'isolation Client / Serveur
Vérifiez que vos composants frontend n'exécutent aucune logique métier critique ni aucun appel direct à des APIs payantes.
- Dans Next.js ou Remix, assurez-vous que les clés d'API sensibles sont lues exclusivement dans des Route Handlers ou des Server Actions protégées par
auth(), comme détaillé dans notre analyse sur les risques du code généré par Cursor. - Dans une SPA Vite, assurez-vous que les appels privés passent par des Supabase Edge Functions ou un serveur Node.js distinct.
Étape 2 : Verrouiller les tables PostgreSQL dans Supabase
Ouvrez votre tableau de bord Supabase et vérifiez le statut RLS de chaque table :
-- Activer impérativement le RLS
ALTER TABLE public.profiles ENABLE ROW LEVEL SECURITY;
-- Restreindre la lecture aux seuls propriétaires
CREATE POLICY "Users can read own profile"
ON public.profiles
FOR SELECT
TO authenticated
USING (auth.uid() = id);
Consultez notre guide complet pour vérifier vos règles Supabase RLS pour auditer l'ensemble de votre base.
Étape 3 : Implémenter la validation cryptographique des webhooks
Remplacez le handler simplifié généré par Bolt par une vérification stricte de signature HMAC :
import { stripe } from '@/lib/stripe';
export async function POST(req: Request) {
const body = await req.text();
const signature = req.headers.get('stripe-signature')!;
try {
const event = stripe.webhooks.constructEvent(
body,
signature,
process.env.STRIPE_WEBHOOK_SECRET!
);
// Traitement sécurisé
} catch (err: any) {
return new Response(`Webhook Error: ${err.message}`, { status: 400 });
}
}
Étape 4 : Définir des quotas et du Rate Limiting
Mettez en place une barrière de protection contre les abus (par exemple avec Upstash Redis ou le rate limiting de Vercel) sur toutes les routes exécutant des calculs lourds ou appelant des LLMs tiers.
Matrice de contrôle avant lancement de votre SaaS
- Dépendances épurées : Exécution de
npm auditpour identifier d'éventuelles vulnérabilités connues dans les paquets installés par Bolt. - RLS actif partout : Aucune table dans Supabase n'est laissée sans Row Level Security.
- Clés privées sécurisées : Les variables d'environnement de production sont renseignées dans la console Vercel/Netlify et ne fuient pas dans le code client.
- Webhooks blindés : Les signatures Stripe ou Lemon Squeezy sont systématiquement validées avant toute mise à niveau de compte.
- Rate Limiting actif : Les routes d'API payantes bloquent les requêtes excessives.
Comment auditer automatiquement votre application Bolt.new avec GVO
La relecture manuelle d'un projet exporté de Bolt.new est chronophage, particulièrement lorsque l'IA a créé des dizaines de fichiers interconnectés.
Pour obtenir une vérification immédiate et sans risque de votre site web en ligne, utilisez notre Audit Express gratuit.
Si vous souhaitez analyser l'intégralité de votre repository GitHub avant le lancement, connectez votre projet à GoodVibesOnly (GVO). Notre scanner identifie les tables non verrouillées, les failles de paiement et les gouffres financiers, et vous fournit les prompts exacts pour corriger votre code en quelques secondes.