[{"data":1,"prerenderedAt":269},["ShallowReactive",2],{"research-fr":3},{"id":4,"title":5,"aside":6,"body":9,"coverAlt":242,"description":243,"extension":244,"faq":245,"lede":261,"meta":262,"navigation":263,"path":264,"published":265,"seo":266,"stem":267,"updated":265,"__hash__":268},"research_fr\u002Fresearch\u002Fvibe-coded-app-security-2026.md","Sécurité des applis vibe-codées : l'état des lieux 2026",[7,8],"Uniquement un regard de l'extérieur. Nous lisons ce que le navigateur d'un visiteur lit déjà : le code que l'appli livre, les en-têtes qu'elle renvoie, les points d'accès que son propre code désigne. Aucune connexion, aucun mot de passe deviné, rien de téléchargé.","Aucune appli n'est nommée ici ni dans le fichier de données. Chaque chiffre porte la méthode qui l'a produit, et le fichier en bas de page rassemble tous les agrégats dans un tableau si vous voulez refaire les calculs.",{"type":10,"value":11,"toc":224},"minimark",[12,17,21,24,27,31,34,37,40,44,47,50,53,56,60,63,66,70,73,76,79,82,86,89,92,95,98,102,105,108,111,125,129,132,135,138,142,214,218,221],[13,14,16],"h2",{"id":15},"six-chiffres-qui-disent-lessentiel","Six chiffres qui disent l'essentiel",[18,19,20],"p",{},"Ces six chiffres sont le rapport. Tout ce qui suit, c'est la base sur laquelle\nchacun repose, et comment nous l'avons obtenue.",[22,23],"research-key-findings",{},[18,25,26],{},"Les réglages par défaut des plateformes échouent presque partout, et la plupart\nde ces échecs sont modérés. Ce que seule la personne qui a construit l'appli\npeut changer échoue bien plus rarement, et c'est ce qui pose les données\nd'autres gens sur l'internet ouvert.",[13,28,30],{"id":29},"comment-ces-applis-sont-notées-de-a-à-f","Comment ces applis sont notées, de A à F",[18,32,33],{},"Reeve note une appli comme un bulletin scolaire. Les points sont retirés d'un\ntotal de cent selon la gravité. Ensuite, le constat le plus grave pose un\nplafond : avec un constat critique, l'appli ne peut pas dépasser D ; avec un\nconstat élevé, elle ne peut pas dépasser C.",[35,36],"research-grades",{},[18,38,39],{},"La plupart des applis se placent en A ou B. La tranche D et F est petite. Ce\nsont les applis où un inconnu peut déjà lire les lignes de quelqu'un d'autre.",[13,41,43],{"id":42},"ce-que-nous-avons-vérifié-et-combien-dapplis-échouent-à-chaque-vérification","Ce que nous avons vérifié, et combien d'applis échouent à chaque vérification",[18,45,46],{},"Chaque vérification pose une question sur l'appli vue de l'extérieur, et chacune\nest comptée sur les applis où elle a obtenu une réponse. Une appli qu'une\nvérification n'a pas pu atteindre sort de la base de cette vérification au lieu\nd'être comptée comme saine. Le scan dit de ces applis qu'il n'a pas pu les\nvérifier, et cette page fait de même.",[48,49],"research-checks-table",{},[18,51,52],{},"Deux lignes font plus peur qu'elles ne le devraient. Les en-têtes de sécurité\nsont des instructions que la plateforme d'hébergement envoie au navigateur, et\nqu'il en manque un laisse une famille d'attaques avec un obstacle de moins\ndevant elle. Une source map publiée, c'est le code d'origine de l'appli posé à\ncôté de la version compilée : elle montre à un attaquant où chercher, et ne\nlivre rien d'elle-même.",[18,54,55],{},"Une ligne peut aussi paraître grave parce qu'une poignée d'applis y ont livré\nquelque chose de sérieux pendant que les autres livraient quelque chose\nd'ordinaire. Le fichier de données détaille chaque ligne par type de clé pour\nqu'on voie laquelle est laquelle.",[13,57,59],{"id":58},"plus-de-la-moitié-des-applis-supabase-vérifiables-laissent-lire-leurs-tables","Plus de la moitié des applis Supabase vérifiables laissent lire leurs tables",[18,61,62],{},"C'est le chiffre sur lequel nous sommes sans cesse revenus.",[18,64,65],{},"Un projet Supabase est ouvert sur internet par conception. L'appli qui tourne\ndans le navigateur parle directement à la base de données, avec une clé faite\npour être publique, et ce qui se tient entre un inconnu et les lignes, c'est Row\nLevel Security : une règle sur chaque table. Désactivez cette règle, ou écrivez\nune politique qui laisse tout le monde entrer, et n'importe quelle table du\nprojet se lit avec une seule requête et sans mot de passe.",[67,68],"research-stat",{"id":69},"supabase",[18,71,72],{},"Moins de la moitié des applis qui désignent un projet Supabase peuvent être\nvérifiées. Certaines font passer le trafic de leur base par leur propre backend,\noù une vérification venue de l'extérieur ne peut pas suivre ; nous n'en disons\ndonc rien du tout. La part ci-dessus porte sur les applis qui ont répondu.",[67,74],{"id":75},"rlsSplit",[18,77,78],{},"La répartition est la partie utile. Une table lisible appelée settings ou\ncontent est une erreur. Une table lisible appelée users, profiles ou orders, ce\nsont les données personnelles d'autres gens sur l'internet ouvert, et la\npersonne qui a construit l'appli les croit presque certainement privées.",[18,80,81],{},"La vérification ne lit jamais une ligne. Elle demande à la base combien de\nlignes seraient visibles et relit le compte dans un en-tête de réponse. Cela\nsuffit à distinguer une table avec règle RLS d'une table sans règle, et la\nvérification ne va pas plus loin.",[13,83,85],{"id":84},"les-mêmes-neuf-vérifications-outil-par-outil","Les mêmes neuf vérifications, outil par outil",[18,87,88],{},"Chaque appli est regroupée selon l'outil avec lequel elle a été publiée, et\nmesurée face aux autres applis de cet outil.",[90,91],"research-builders-table",{},[18,93,94],{},"L'essentiel de ce que compare ce tableau, ce sont des réglages par défaut.\nPersonne ne choisit Lovable ou Bolt pour ses en-têtes de sécurité. C'est la\nplateforme qui les règle pour toutes les applis qu'elle héberge, donc un seul\nchangement de sa part déplace une colonne entière de ce tableau.",[18,96,97],{},"Deux limites, avant que quiconque cite une ligne. Nous rattachons les applis à\nleur domaine de publication : une appli passée à un domaine personnalisé reste\nentièrement hors de ce tableau, et ce sont souvent les plus abouties. Et un\noutil qui fait passer le trafic de base de données par son propre backend ne\npeut tout simplement pas être vérifié de l'extérieur. Un blanc à cet endroit\nsignifie que nous n'avons pas pu mesurer, et ne dit rien de la sûreté de ces\napplis.",[13,99,101],{"id":100},"deux-sortes-de-constats-deux-sortes-de-corrections","Deux sortes de constats, deux sortes de corrections",[18,103,104],{},"Les constats de cette page tombent dans deux groupes, et les deux appellent des\nmains différentes.",[106,107],"research-controls",{},[18,109,110],{},"Le premier groupe est une décision produit prise dans une entreprise. Une seule\nmodification d'un réglage d'hébergement par défaut déplace d'un coup toutes les\napplis de la plateforme, et c'est pourquoi ces lignes sortent si uniformes et\nsont les moins coûteuses à corriger.",[18,112,113,114,119,120,124],{},"Le second groupe revient à la personne qui a construit l'appli. Aucune\nplateforme d'hébergement ne peut savoir lesquelles de vos tables doivent être\npubliques, ni quelle clé appartient à un serveur. Tous les constats critiques de\nce rapport sont dans ce groupe. Les ",[115,116,118],"a",{"href":117},"\u002Fis","guides de sécurité par outil"," et la\n",[115,121,123],{"href":122},"\u002Fchecklist","checklist de lancement"," commencent tous les deux là.",[13,126,128],{"id":127},"ce-que-les-applis-vibe-codées-font-bien","Ce que les applis vibe-codées font bien",[18,130,131],{},"Nous avons aussi compté ce qui passe, sur les mêmes applis.",[133,134],"research-clean-rates",{},[18,136,137],{},"La dernière carte est celle sur laquelle les scanners génériques se trompent.\nUne clé publiable dans le frontend (une clé anon Supabase, une clé publiable\nStripe) est exactement à sa place : elle est faite pour être lue, et la\nprotection vit dans les règles derrière elle. La signaler envoie quelqu'un\nchanger un réglage qui était déjà juste.",[13,139,141],{"id":140},"comment-nous-avons-mesuré-et-où-sont-les-limites","Comment nous avons mesuré, et où sont les limites",[143,144,145,160,175,194],"research-method",{},[146,147,149,154,157],"template",{"v-slot:origin":148},"",[150,151,153],"h3",{"id":152},"doù-viennent-les-applis","D'où viennent les applis",[18,155,156],{},"Trois listes, fusionnées et dédoublonnées : des applis que des gens ont publiées\nsur X et Reddit, des applis lancées sur Show HN, et des applis que nous avons\nénumérées depuis les domaines de publication des outils eux-mêmes. Les domaines\nde publication font l'essentiel de l'échantillon et sont la seule liste qui\npasse à l'échelle. Les deux autres ne trouvent que les applis dont quelqu'un a\nchoisi de parler.",[18,158,159],{},"Les hôtes morts sont sortis en premier, et nous en avons jugé en lisant la page\nelle-même. Un déploiement supprimé répond souvent encore par un 200 OK\nparfaitement enjoué.",[146,161,162,166,169,172],{"v-slot:denominator":148},[150,163,165],{"id":164},"la-règle-du-dénominateur","La règle du dénominateur",[18,167,168],{},"Chaque part de cette page porte sur les applis auxquelles cette vérification a\npu répondre, jamais sur l'échantillon entier. Une vérification qui n'a pas pu\natteindre une appli laisse cette appli hors de sa propre base, et ne la compte\njamais comme saine. Les deux nombres à côté de chaque barre sont cette base,\npour que chacun voie laquelle il lit.",[67,170],{"id":171},"inconclusive",[18,173,174],{},"Les notes portent sur un nombre plus petit pour la même raison. Une appli qui a\nrenvoyé trop peu de choses pour être classée sort de tous les chiffres\nci-dessus au lieu d'être notée au jugé.",[146,176,177,181],{"v-slot:scope":148},[150,178,180],{"id":179},"ce-que-nous-avons-fait-et-pas-fait","Ce que nous avons fait, et pas fait",[182,183,184,188,191],"ul",{},[185,186,187],"li",{},"Uniquement des lectures passives : les requêtes que le navigateur d'un\nvisiteur fait déjà, plus les points d'accès publics que l'appli désigne\nelle-même.",[185,189,190],{},"La vérification de la base prend un compte de lignes dans un en-tête de\nréponse. Nous n'avons jamais lu une ligne, téléchargé un fichier, ouvert de\nsession ni deviné un mot de passe.",[185,192,193],{},"Aucune appli n'est nommée, ni ici ni dans le fichier de données. Une liste\nd'applis accompagnées de leurs faiblesses est une liste de cibles, et nous\nn'en gardons pas sous une forme publiable.",[146,195,196,200],{"v-slot:limits":148},[150,197,199],{"id":198},"des-limites-à-connaître","Des limites à connaître",[182,201,202,205,208,211],{},[185,203,204],{},"L'échantillon penche vers les applis récentes. Une appli passée à un domaine\npersonnalisé ne peut pas être rattachée à un outil depuis l'extérieur, et ce\nsont souvent les plus établies.",[185,206,207],{},"La couleur d'une ligne marque le cas le plus grave que nous ayons vu, qui peut\nêtre une appli sur des centaines. Le fichier de données détaille chaque ligne\npar type de clé exact.",[185,209,210],{},"C'est une fenêtre de trois jours en août. Une appli corrigée la semaine\nsuivante compte ici telle qu'elle était le jour où nous avons regardé.",[185,212,213],{},"Une vérification externe automatisée n'est pas un audit. L'absence de constat\nn'est pas une garantie.",[13,215,217],{"id":216},"réutilisez-ces-chiffres","Réutilisez ces chiffres",[18,219,220],{},"Journalistes, chercheurs et toute personne qui écrit sur le sujet peuvent\nréutiliser ces données en citant la source. Le fichier ci-dessous contient tous\nles agrégats de cette page dans un seul tableau à plat, et ne nomme aucune\nappli.",[222,223],"research-cite",{},{"title":148,"searchDepth":225,"depth":225,"links":226},3,[227,229,230,231,232,233,234,235,241],{"id":15,"depth":228,"text":16},2,{"id":29,"depth":228,"text":30},{"id":42,"depth":228,"text":43},{"id":58,"depth":228,"text":59},{"id":84,"depth":228,"text":85},{"id":100,"depth":228,"text":101},{"id":127,"depth":228,"text":128},{"id":140,"depth":228,"text":141,"children":236},[237,238,239,240],{"id":152,"depth":225,"text":153},{"id":164,"depth":225,"text":165},{"id":179,"depth":225,"text":180},{"id":198,"depth":225,"text":199},{"id":216,"depth":228,"text":217},"Une carte de partage sombre portant la marque Reeve, le titre du rapport et le nombre d'applis en ligne de l'analyse, en gros chiffres.","Nous avons soumis des dizaines de milliers d'applis en ligne créées avec Lovable, Bolt, v0, Replit et Base44 aux mêmes neuf vérifications. Voici le relevé.","md",[246,249,252,255,258],{"q":247,"a":248},"Pouvez-vous me dire quelles applis avaient quels problèmes ?","Non. Des effectifs et des parts uniquement, jamais des noms, et le fichier de données contient exactement ce que la page affiche. Une liste d'applis accompagnées de leurs faiblesses est une liste de cibles, et nous n'en produirons pas.",{"q":250,"a":251},"Mon appli est peut-être dans ces données. Que dois-je faire ?","Analysez-la vous-même. Ce sont les mêmes neuf vérifications, cela prend une vingtaine de secondes, et vous obtenez votre note et ce qu'un inconnu voit déjà. Rien sur cette page n'identifie qui que ce soit : c'est donc le seul moyen de savoir où vous en êtes.",{"q":253,"a":254},"Une table de base de données lisible, est-ce vraiment si grave ?","Si n'importe qui sur internet peut tirer ces lignes avec une seule requête et sans mot de passe, oui. Une table lisible appelée settings est du laisser-aller. Une table lisible appelée users ou orders est une fuite de données que personne n'a encore remarquée.",{"q":256,"a":257},"Pourquoi comptez-vous les clés publiables comme correctes ?","La clé anon de Supabase est faite pour être publique. La protection, ce sont les règles de la base derrière elle, pas la clé elle-même. Les outils qui signalent ces clés apprennent aux gens à passer sur l'avertissement suivant, qui est peut-être celui qui compte.",{"q":259,"a":260},"Referez-vous cette étude ?","Oui. Les analyses continuent de tourner et la prochaine édition les suivra. Le fichier de données consigne la fenêtre d'où viennent ces chiffres, pour qu'une vieille copie ne puisse pas passer pour une copie à jour.","Nous avons cherché des applis en ligne créées avec Lovable, Bolt, v0, Replit ou Base44, puis passé chacune par les mêmes neuf vérifications que n'importe qui peut lancer gratuitement depuis la page d'accueil de Reeve. Cette page est le relevé.",{},true,"\u002Fresearch\u002Fvibe-coded-app-security-2026","2026-08-19",{"title":5,"description":243},"research\u002Fvibe-coded-app-security-2026","LqBRocu41-4DrgmNLTcMmeo7UY7A6fQ-lD3XOyME_5U",1787826048205]