Les erreurs que l'IA laisse dans le code.

Envoyez l'archive .zip du projet ou l'adresse d'un dépôt GitHub public. Tamiso cherche les clés secrètes, les tables Supabase sans RLS, le SQL construit avec du texte et les autres erreurs fréquentes, puis montre par où passent les données.

boutique-en-ligne

4 problèmes à corriger avant de publier. Dernière analyse le 01/11/2026, boutique-en-ligne.zip.

boutique-en-ligne.zip10 fichiers analysés

Carte du code

D'où viennent les données, par quelles fonctions elles passent et où elles arrivent. Les problèmes sont placés dans la fonction où ils apparaissent ; choisissez-en un pour ne garder que son chemin.

D'où viennent les donnéesCode : fichiers et fonctionsOù elles arrivent src/app/api/orders/route.tssrc/lib/orders.tssrc/lib/stripe.tssrc/lib/mail.tssrc/app/api/search/route.tssrc/lib/products.tssupabase/migrations/003_orders.sql jsonquery: qbody.itemsqitemsemailresend.emails.sendordersqueryrèglesrègles POST /api/ordersPOST /api/ordersrequête HTTPGET /api/searchGET /api/searchrequête HTTPPOST(request)POST(request)src/app/api/orders/route.ts:3GET(request)GET(request)src/app/api/search/route.ts:3sendConfirmation(email, id)sendConfirmation(email,…src/lib/mail.ts:5createOrder(items, email)createOrder(items, emai…src/lib/orders.ts:5total(items)total(items)src/lib/orders.ts:12searchProducts(q)searchProducts(q)src/lib/products.ts:3createPayment(amount)createPayment(amount)src/lib/stripe.ts:5const stripe = new Stripe("sk_l****")const stripe = new Stri…src/lib/stripe.ts:3create table orders (id uuid primary key, items jsonb, email text);create table orders (id…supabase/migrations/003_orde…alter table orders disable row level security;alter table orders disa…supabase/migrations/003_orde…Base de donnéesBase de donnéesPostgreSQL, SupabaseE-mailsE-mailsenvoi
problème dans cette fonction entrée d'où viennent les données chemin du problème où arrivent les données

Choisissez un problème

La carte garde alors seulement son chemin : l'entrée d'où viennent les données, les fonctions traversées et l'endroit où elles arrivent.

Carte construite par lecture du code (Python, JavaScript et TypeScript), sans l'exécuter : un appel dynamique ou un décorateur peut lui échapper. Seuls les noms des fonctions, des routes et les numéros de ligne sont gardés.

critiqueCWE-798
Clé secrète Stripe dans le code

Avec cette clé, n'importe qui peut créer des paiements, des remboursements et lire vos clients.

Révoquez la clé dans le tableau de bord Stripe, puis lisez-la depuis une variable d'environnement côté serveur.

1 endroit dans le code
  • src/lib/stripe.ts:3const stripe = new Stripe("sk_l****")
Voir le prompt

Dans src/lib/stripe.ts:3 : Clé secrète Stripe dans le code. Révoquez la clé dans le tableau de bord Stripe, puis lisez-la depuis une variable d'environnement côté serveur. Corrige seulement ces endroits, puis explique-moi le changement.

critiqueCWE-284
Table Supabase sans RLS

Sans Row Level Security, la clé anon publique de votre application suffit pour lire et modifier toute la table.

Ajoutez « alter table … enable row level security; » puis des règles qui limitent chaque ligne à son propriétaire (auth.uid()).

1 endroit dans le code
  • supabase/migrations/003_orders.sql:1create table orders (id uuid primary key, items jsonb, email text);
Voir le prompt

Dans supabase/migrations/003_orders.sql:1 : Table Supabase sans RLS. Ajoutez « alter table … enable row level security; » puis des règles qui limitent chaque ligne à son propriétaire (auth.uid()). Corrige seulement ces endroits, puis explique-moi le changement.

critiqueCWE-284
RLS désactivée sur une table

La table redevient lisible et modifiable par tout le monde avec la clé anon.

Supprimez cette ligne et activez RLS avec des règles par utilisateur.

1 endroit dans le code
  • supabase/migrations/003_orders.sql:2alter table orders disable row level security;
Voir le prompt

Dans supabase/migrations/003_orders.sql:2 : RLS désactivée sur une table. Supprimez cette ligne et activez RLS avec des règles par utilisateur. Corrige seulement ces endroits, puis explique-moi le changement.

élevéeCWE-89
Requête SQL construite avec du texte de l'utilisateur

Si une valeur vient de l'utilisateur, il peut lire ou effacer la base (injection SQL).

Utilisez des paramètres (%s, ?, $1) ou l'ORM au lieu de coller les valeurs dans la requête.

1 endroit dans le code
  • src/lib/products.ts:4const res = await pool.query(`SELECT * FROM products WHERE name LIKE '%${q}%'`) Donnée envoyée par l'utilisateur dans src/app/api/search/route.ts:4, transmise par searchProducts (src/app/api/search/route.ts:5), utilisée ici sans contrôle.
Voir le prompt

Dans src/lib/products.ts:4 : Requête SQL construite avec du texte de l'utilisateur. Utilisez des paramètres (%s, ?, $1) ou l'ORM au lieu de coller les valeurs dans la requête. Corrige seulement ces endroits, puis explique-moi le changement.

Ce que vérifie l'analyse du code

Les clés et mots de passe écrits dans le code (Stripe, AWS, GitHub, GitLab, OpenAI, Anthropic, Hugging Face, SendGrid, Slack, Telegram, Google, jetons npm et PyPI, adresses de base de données avec mot de passe, clés privées, fichiers .env), la clé secrète de l'application écrite en dur, les secrets exposés au navigateur (NEXT_PUBLIC_, VITE_…), la clé service_role de Supabase côté navigateur, les tables Supabase sans RLS ou avec des règles ouvertes (sur toutes les migrations du projet), les règles Firebase ouvertes ou en « mode test », les vues et fonctions Supabase qui contournent RLS, les requêtes SQL et les commandes système construites avec du texte, les requêtes, fichiers et redirections choisis par l'utilisateur (aussi quand la valeur passe par une variable quelques lignes plus haut), les données enregistrées sans choisir les champs, le chargement de données qui peut exécuter du code, les mots de passe hachés en MD5 ou comparés à une valeur fixe, la protection CSRF ou les cookies de session affaiblis, les jetons dans localStorage ou tirés avec Math.random, le debug activé, la vérification TLS ou JWT désactivée, CORS ouvert avec identifiants et le HTML inséré sans nettoyage. Les valeurs d'exemple (your-key, xxxx), les mots de passe locaux par défaut, les commentaires, les tests et les configurations de test ne sont pas signalés, sauf pour les secrets.

Dans un projet, l'analyse note aussi quels paquets sont importés dans le code : une faille dans un paquet que le code n'importe jamais, et dont aucun autre paquet n'a besoin d'après le fichier de verrouillage, descend d'un niveau, avec la raison. Les fichiers de dépendances trouvés (package-lock.json, requirements.txt, composer.lock…) donnent directement une nouvelle version de l'analyse des dépendances.

Le code est lu en mémoire puis oublié : Tamiso garde seulement le nom du fichier, la ligne et un court extrait où les secrets sont masqués. Les dossiers de dépendances et de build (node_modules, dist…) sont ignorés. Une analyse par règles ne remplace pas une revue de sécurité.

Comment ça marche

Des règles pour les erreurs fréquentes

Secrets, Supabase et Firebase, injections SQL, redirections ouvertes, mode debug laissé actif. Chaque règle a son identifiant CWE et sa correction en une phrase.

La carte du code

D'où viennent les données (routes, scripts), par quelles fonctions elles passent et où elles arrivent : base de données, e-mails, fichiers, services externes. Chaque problème est placé sur son chemin.

Le code n'est pas gardé

L'archive est lue en mémoire, puis oubliée. Tamiso garde le fichier, la ligne, la règle et un court extrait avec le secret masqué.

Inclus dans l'offre gratuiteAvec l'offre Indie, l'IA écarte les fausses alertes, dit pourquoi et vérifie si votre code appelle la partie vulnérable d'un paquet.
Analyser votre code