[{"data":1,"prerenderedAt":895},["ShallowReactive",2],{"blog-fr-supabase-permission-denied-for-table":3,"blog-index-fr":544},{"id":4,"title":5,"body":6,"category":503,"cover":504,"coverAlt":505,"description":506,"draft":507,"extension":508,"faq":509,"image":524,"keywords":525,"meta":532,"navigation":533,"ogTitle":534,"path":535,"published":536,"seo":537,"stem":538,"tldr":539,"updated":536,"__hash__":543},"blog_fr\u002Fblog\u002Fsupabase-permission-denied-for-table.md","Supabase \"permission denied for table\" : le grant manquant",{"type":7,"value":8,"toc":491},"minimark",[9,18,26,31,34,57,60,70,73,76,80,87,107,151,154,160,163,202,206,209,216,225,229,232,238,241,247,262,267,274,278,281,297,300,351,355,358,366,369,393,397,402,436,443,447,485],[10,11,12,13,17],"p",{},"Si votre app tourne sur Supabase, vous avez probablement reçu un e-mail à propos\ndu 30 octobre. Il dit que rien ne change pour les tables que vous avez déjà,\npuis il vous tend trois instructions SQL. Ou alors nous sommes déjà en novembre :\nvous avez demandé une nouvelle fonctionnalité à Lovable, Bolt ou Cursor, le\nnouvel écran est resté vide, et quelque part dans la console se trouve un\nmessage qui dit ",[14,15,16],"code",{},"permission denied for table",". C'est le même changement\nSupabase, vu de part et d'autre de la date.",[10,19,20,21,25],{},"Voici ce que l'e-mail ne dit pas : ",[22,23,24],"strong",{},"le SQL qu'il vous montre n'est que la\nmoitié de la solution."," Exécutez cette moitié seule, sur la mauvaise table, et\nvotre app remarche pendant que la nouvelle table donne ses lignes à quiconque\nles demande.",[27,28,30],"h2",{"id":29},"que-signifie-permission-denied-for-table-dans-supabase","Que signifie \"permission denied for table\" dans Supabase ?",[10,32,33],{},"Cela signifie que le type de visiteur qui fait la requête n'a reçu aucun accès\nà cette table, si bien que la base a refusé avant même de regarder une seule\nligne.",[10,35,36,37,40,41,44,45,48,49,52,53,56],{},"Supabase range chaque requête dans un ",[22,38,39],{},"rôle",", c'est-à-dire le type de\nvisiteur dont elle vient. ",[14,42,43],{},"anon",", c'est quelqu'un qui n'est pas connecté.\n",[14,46,47],{},"authenticated",", quelqu'un qui l'est. ",[14,50,51],{},"service_role",", c'est votre propre code\nserveur qui utilise la clé secrète. Un ",[22,54,55],{},"grant"," est l'instruction qui donne à\nl'un de ces rôles l'accès à une table dans Postgres, la base de données sur\nlaquelle tourne Supabase. Pas de grant, pas d'accès, quoi que vous ayez écrit\npar ailleurs.",[10,58,59],{},"Quand le grant manque, Supabase répond ainsi, en général sous forme de 401 ou\nde 403 :",[61,62,67],"pre",{"className":63,"code":65,"language":66},[64],"language-text","{\n  \"code\": \"42501\",\n  \"message\": \"permission denied for table comments\",\n  \"hint\": \"Grant the required privileges to the current role with: GRANT SELECT ON public.comments TO anon;\"\n}\n","text",[14,68,65],{"__ignoreMap":69},"",[10,71,72],{},"L'indication est la partie utile. Elle nomme le rôle qui a été refusé et\nl'instruction exacte qui le laisserait entrer.",[10,74,75],{},"Imaginez chaque table comme une pièce. Le grant est la porte, et il y a une\nporte distincte pour chaque rôle. Row Level Security, les règles par ligne que\nvous avez peut-être déjà croisées, décide quels tiroirs un visiteur peut ouvrir\nune fois entré. \"Permission denied for table\" veut dire que quelqu'un se tient\ndevant une porte fermée. Il n'est jamais arrivé jusqu'à vos règles.",[27,77,79],{"id":78},"quest-ce-qui-change-le-30-octobre","Qu'est-ce qui change le 30 octobre ?",[10,81,82,83,86],{},"Les nouvelles tables du schéma ",[14,84,85],{},"public",", le dossier de tables qu'utilise votre\nbuilder sauf indication contraire, arrivent désormais avec leurs portes\nfermées.",[10,88,89,90,92,93,95,96,98,99,106],{},"Jusqu'ici, Supabase ouvrait automatiquement les trois portes de chaque nouvelle\ntable : lire, ajouter, modifier et supprimer, pour ",[14,91,43],{},", ",[14,94,47],{}," et\n",[14,97,51],{}," à la fois. Une table était accessible depuis votre app dès\nqu'elle existait, et vos règles Row Level Security étaient la seule chose entre\nun inconnu et ses lignes. Le\n",[100,101,105],"a",{"href":102,"rel":103},"https:\u002F\u002Fsupabase.com\u002Fchangelog\u002F45329-breaking-change-tables-not-exposed-to-data-and-graphql-api-automatically",[104],"nofollow","changelog","\nde Supabase donne la raison sans détour : des agents et des plateformes d'IA\ncréent aujourd'hui des tables sans que personne ne relise le changement, et les\ngrants automatiques exposaient des tables que \"a developer forgot to protect\",\nqu'un développeur avait oublié de protéger.",[108,109,110,123],"table",{},[111,112,113],"thead",{},[114,115,116,120],"tr",{},[117,118,119],"th",{},"Date",[117,121,122],{},"Ce qui s'est passé ou se passe",[124,125,126,135,143],"tbody",{},[114,127,128,132],{},[129,130,131],"td",{},"28 avril 2026",[129,133,134],{},"Les nouveaux projets pouvaient refuser les grants automatiques à leur création.",[114,136,137,140],{},[129,138,139],{},"30 mai 2026",[129,141,142],{},"L'absence de grants automatiques a commencé à devenir la règle pour les nouveaux projets.",[114,144,145,148],{},[129,146,147],{},"30 octobre 2026",[129,149,150],{},"Les projets existants cessent eux aussi de les recevoir.",[10,152,153],{},"Si votre projet a été créé après la fin mai, il fonctionne peut-être déjà ainsi,\ncar Supabase a déployé le nouveau réglage par défaut sur les nouveaux projets\nau fil des semaines qui ont suivi cette date.",[155,156],"diagram",{"alt":157,"caption":158,"src":159},"Une frise avec un repère à 2026-10-30. Avant lui, trois tables se tiennent portes ouvertes : deux ont un cadenas au-dessus de leurs lignes, la troisième n'en a pas et ses lignes sont ambre. Après lui, deux nouvelles tables se tiennent portes fermées.","Les tables qui existent le 30 octobre gardent les portes qu'elles ont, y compris celle qui était ouverte aux inconnus. Seules les tables créées après commencent porte fermée.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fbefore-and-after-october-30-1600x620.png",[10,161,162],{},"Trois détails méritent d'être connus avant la date :",[164,165,166,184,196],"ul",{},[167,168,169,175,176,179,180,183],"li",{},[22,170,171,172,174],{},"Seulement le schéma ",[14,173,85],{},"."," Storage et la connexion rangent leurs tables\ndans des schémas à eux, ",[14,177,178],{},"storage"," et ",[14,181,182],{},"auth",", et Supabase indique que leurs\ngrants et leurs réglages par défaut restent inchangés.",[167,185,186,189,190,192,193,195],{},[22,187,188],{},"La clé secrète est refusée aussi."," Les grants automatiques couvraient\négalement ",[14,191,51],{},". Une edge function (du code serveur que Supabase\nexécute pour vous) qui utilise votre clé secrète reçoit donc la même erreur\nsur une nouvelle table, jusqu'à ce que ",[14,194,51],{}," ait son propre grant.",[167,197,198,201],{},[22,199,200],{},"Une table supprimée puis recréée est une nouvelle table."," Les grants\nappartiennent à la table elle-même et disparaissent avec elle quand elle est\nsupprimée. Si votre builder reconstruit une table pour la modifier, la table\nreconstruite commence porte fermée.",[27,203,205],{"id":204},"mon-app-va-t-elle-casser-le-30-octobre","Mon app va-t-elle casser le 30 octobre ?",[10,207,208],{},"Pas ce jour-là. Elle casse la première fois que quelque chose crée une nouvelle\ntable sans créer aussi le grant.",[10,210,211,212,215],{},"Pour la plupart des lecteurs, ce quelque chose, c'est leur builder. Vous\ndemandez une section de commentaires. Le builder écrit une migration, le\nfichier de modifications de base de données qu'il exécute pour vous, et la\nmigration crée une table ",[14,213,214],{},"comments",". S'il écrit aussi les grants, vous ne verrez\njamais cette erreur. Sinon, l'écran des commentaires n'affiche rien, ou\nl'enregistrement d'un commentaire échoue, ou un message rouge apparaît, selon la\nfaçon dont votre app gère les erreurs. Tous les écrans que vous aviez déjà\ncontinuent de fonctionner.",[10,217,218,219,224],{},"Supabase publie un ",[100,220,223],{"href":221,"rel":222},"https:\u002F\u002Fsupabase.com\u002Fblog\u002Fsupabase-agent-skills",[104],"agent skill","\npour les outils de code par IA qui inclut l'étape du grant. Que votre builder\nl'utilise ou non dépend de votre builder. Mieux vaut donc supposer que la\nprochaine table qu'il crée peut arriver porte fermée.",[27,226,228],{"id":227},"le-grant-proposé-par-lerreur-est-il-sans-risque","Le GRANT proposé par l'erreur est-il sans risque ?",[10,230,231],{},"Seulement une fois que la table a Row Level Security activé et une règle écrite\npour elle. Le grant décide qui passe la porte. Il ne décide en rien des tiroirs\nqu'on ouvre ensuite.",[10,233,234,235,237],{},"La clé avec laquelle votre app envoie ses requêtes à Supabase est livrée dans\nvotre app. Un grant à ",[14,236,43],{}," veut donc dire que n'importe quel visiteur,\nconnecté ou non, peut désormais demander des lignes à cette table. Avec une\nrègle en place, il obtient les lignes que la règle autorise. Avec Row Level\nSecurity désactivé, il obtient toutes les lignes de la table, et rien dans votre\napp n'aura l'air différent.",[10,239,240],{},"L'e-mail montre trois grants et s'arrête là. Le changelog de Supabase montre\ntrois étapes, et dit de \"treat these three steps as a unit\", de les traiter\ncomme un tout :",[61,242,245],{"className":243,"code":244,"language":66},[64],"-- 1. qui peut atteindre la table\ngrant select on public.orders to authenticated;\ngrant select, insert, update, delete on public.orders to service_role;\n\n-- 2. activer les règles par ligne\nalter table public.orders enable row level security;\n\n-- 3. la règle elle-même\ncreate policy \"Customers read their own orders\"\n  on public.orders\n  for select\n  to authenticated\n  using (auth.uid() = user_id);\n",[14,246,244],{"__ignoreMap":69},[10,248,249,250,252,253,258,259,261],{},"Il n'y a aucune ligne pour ",[14,251,43],{}," dans cet exemple, et c'est voulu. Personne de\ndéconnecté ne devrait atteindre une table de commandes, donc la porte des\ninconnus reste fermée, et les clients connectés n'obtiennent que la lecture\ndont leur écran a besoin. La règle réduit ensuite cela à leurs propres lignes.\nSupabase conseille lui-même de\n",[100,254,257],{"href":255,"rel":256},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fapi\u002Fsecuring-your-api",[104],"n'accorder à chaque rôle que le strict nécessaire",".\nUn grant à ",[14,260,43],{}," a sa place sur une table dont les lignes sont faites pour tout\nle monde, comme les commentaires sous un article public.",[155,263],{"alt":264,"caption":265,"src":266},"Trois couloirs, chacun une requête d'anon vers la même table. Dans le premier, la porte est fermée et la flèche s'arrête devant, à côté du code 42501. Dans le deuxième, la porte est ouverte, la flèche s'arrête à une barre Row Level Security, et deux lignes de la table s'allument. Dans le troisième, la porte est ouverte, la barre n'est qu'un contour en pointillés, et toutes les lignes s'allument en ambre.","Le grant décide si une requête atteint la table. Les règles derrière décident combien elle emporte. Une porte ouverte sans règles derrière livre la table entière.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fthe-door-and-the-rules-1600x760.png",[10,268,269,270,174],{},"Si vous voulez voir de quel côté de cette image se trouvent vos tables, notre\nscan gratuit pose à votre app en ligne la question qu'un inconnu poserait,\ncompte les lignes qu'il recevrait sans en récupérer aucune, et prend environ\n20 secondes, sans compte : ",[100,271,273],{"href":272},"\u002Fsecurity-scanner","scannez votre app",[27,275,277],{"id":276},"pourquoi-les-correctifs-row-level-security-ne-touchent-pas-cette-erreur","Pourquoi les correctifs Row Level Security ne touchent pas cette erreur",[10,279,280],{},"Parce que le grant est vérifié en premier. Une requête refusée à la porte\nn'atteint jamais vos règles, et modifier les règles ne change donc rien à\nl'erreur.",[10,282,283,284,287,288,292,293,296],{},"C'est important parce que le code est partagé. ",[14,285,286],{},"42501",", c'est aussi ce que\nrenvoie Postgres quand Row Level Security refuse un enregistrement, comme dans\n",[100,289,291],{"href":290},"\u002Fblog\u002Fnew-row-violates-row-level-security-policy","new row violates row-level security policy",".\nUn assistant qui se fie au seul code peut se tourner vers les correctifs de\ncette autre erreur : désactiver Row Level Security, ou ajouter une règle\n",[14,294,295],{},"using (true)",", qui laisse passer tout le monde. Aucun des deux ne fait\ndisparaître cette erreur. Les deux restent en place une fois le grant enfin\najouté, et la porte s'ouvre alors sur des tiroirs sans serrure.",[10,298,299],{},"Les mots du message distinguent les deux, même si le numéro ne le fait pas :",[108,301,302,315],{},[111,303,304],{},[114,305,306,309,312],{},[117,307,308],{},"Le message dit",[117,310,311],{},"Quelle serrure a refusé",[117,313,314],{},"Ce qui corrige",[124,316,317,329,341],{},[114,318,319,323,326],{},[129,320,321],{},[14,322,16],{},[129,324,325],{},"la porte (le grant)",[129,327,328],{},"un grant pour le rôle que nomme l'indication",[114,330,331,335,338],{},[129,332,333],{},[14,334,291],{},[129,336,337],{},"les règles",[129,339,340],{},"une policy qui autorise cette ligne",[114,342,343,346,348],{},[129,344,345],{},"aucune erreur, et la liste est vide",[129,347,337],{},[129,349,350],{},"une policy de lecture pour ce rôle",[27,352,354],{"id":353},"ce-que-le-30-octobre-ne-corrige-pas","Ce que le 30 octobre ne corrige pas",[10,356,357],{},"Aucune des tables que vous avez déjà. Chacune garde exactement l'accès qu'elle\na aujourd'hui, y compris une table qu'un inconnu peut lire en ce moment.",[10,359,360,361,365],{},"Le changement concerne des tables qui n'existent pas encore. Jusqu'ici, chaque\nnouvelle table arrivait portes ouvertes, et une app construite avant le\n30 octobre peut donc en avoir une où personne n'a jamais posé les serrures :\nRow Level Security jamais activé, ou\n",[100,362,364],{"href":363},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","activé sous une règle qui laisse entrer tout le monde",".\nLe 30 octobre laisse ces pièces exactement comme elles sont.",[10,367,368],{},"Trois endroits vous montrent où vous en êtes :",[370,371,372,378,384],"ol",{},[167,373,374,377],{},[22,375,376],{},"La page de réglages de la Data API",", vers laquelle pointe l'e-mail. Dans\nle tableau de bord, elle se trouve sous Integrations, puis Data API, et elle\nliste lesquelles de vos tables sont accessibles.",[167,379,380,383],{},[22,381,382],{},"Le Security Advisor",", qui, selon Supabase, liste les tables à revoir avant\nle changement.",[167,385,386,389,390,174],{},[22,387,388],{},"La vue de l'extérieur."," Aucun des deux premiers ne vous dit ce qu'un\ninconnu récupère. Pour cela, il faut interroger votre app en ligne comme le\nferait un inconnu, et c'est ",[100,391,392],{"href":272},"ce que fait notre scan",[27,394,396],{"id":395},"comment-reeve-surveille-les-tables-que-vous-ajoutez","Comment Reeve surveille les tables que vous ajoutez",[10,398,399],{},[22,400,401],{},"Après le 30 octobre, chaque table que votre builder ajoute est une nouvelle\ndécision sur qui passe la porte. Reeve vérifie la réponse depuis l'extérieur,\net Monitor continue de la vérifier.",[164,403,404,412,422],{},[167,405,406,409,410,174],{},[22,407,408],{},"Le scan gratuit"," demande à chaque table que nomme votre app combien de\nlignes recevrait un visiteur sans connexion, lit ce nombre et s'arrête là,\nsans récupérer une seule ligne. Environ 20 secondes, sans compte :\n",[100,411,273],{"href":272},[167,413,414,417,418,421],{},[22,415,416],{},"Reeve Monitor"," lance les neuf vérifications toutes les heures sur jusqu'à\ntrois apps et vous envoie un e-mail le jour où votre note ",[22,419,420],{},"se dégrade",". Un\ndéploiement qui a ouvert quelque chose n'attend donc pas que vous veniez\nregarder.",[167,423,424,427,428,431,432,174],{},[22,425,426],{},"Care"," lance les mêmes vérifications et conserve une copie chiffrée de votre\nbase ",[22,429,430],{},"Supabase"," en dehors de votre compte Supabase. Si le correctif d'un\nassistant reconstruit une table, il existe une copie à laquelle revenir.\n",[100,433,435],{"href":434},"\u002Fsupabase-backups","Comment la copie est faite et remise en place",[10,437,438,439,174],{},"Ce que couvre chaque formule est sur la ",[100,440,442],{"href":441},"\u002Fpricing","page des tarifs",[27,444,446],{"id":445},"que-faire-avant-le-30-octobre","Que faire avant le 30 octobre",[448,449,450],"key-takeaways",{},[164,451,452,455,462,468,476,482],{},[167,453,454],{},"Laissez tranquilles les tables que vous avez déjà si tout ce que vous voulez, c'est que votre app continue de fonctionner. Elles gardent leurs grants.",[167,456,457,458,461],{},"Demandez à votre builder d'écrire, pour chaque nouvelle table, le grant, ",[14,459,460],{},"enable row level security"," et une policy dans la même migration, comme un seul changement.",[167,463,464,465,467],{},"Quand l'erreur apparaît, lisez quel rôle nomme l'indication. ",[14,466,43],{}," veut dire chaque visiteur de votre app.",[167,469,470,471,473,474,174],{},"N'accordez rien à ",[14,472,43],{}," sur une table tant que Row Level Security n'est pas activé et qu'aucune règle n'est écrite. Les tables qui contiennent des personnes ou des commandes n'ont en général besoin d'aucun grant pour ",[14,475,43],{},[167,477,478,479,481],{},"Refusez tout correctif qui désactive Row Level Security ou ajoute ",[14,480,295],{}," pour faire disparaître une erreur de permission. Aucun des deux ne la touche.",[167,483,484],{},"Vérifiez ce qu'un inconnu peut lire dans les tables que vous avez déjà. Le 30 octobre les laisse telles quelles.",[10,486,487,488,490],{},"Commencez par la table qu'un inconnu aimerait le plus lire, souvent celle qui\ncontient des personnes, et ",[100,489,273],{"href":272}," pour voir ce\nqu'elle livre aujourd'hui.",{"title":69,"searchDepth":492,"depth":492,"links":493},3,[494,496,497,498,499,500,501,502],{"id":29,"depth":495,"text":30},2,{"id":78,"depth":495,"text":79},{"id":204,"depth":495,"text":205},{"id":227,"depth":495,"text":228},{"id":276,"depth":495,"text":277},{"id":353,"depth":495,"text":354},{"id":395,"depth":495,"text":396},{"id":445,"depth":495,"text":446},"Bases de la sécurité","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fcover-1200x630.png","Une rangée de portes vers des tables de base de données. Les anciennes s'ouvrent sur des lignes éclairées, la dernière, au bout, est fermée.","Dès le 30 octobre, une nouvelle table Supabase répond \"permission denied for table\" tant que l'accès n'est pas accordé. Le grant de l'e-mail est la moitié.",false,"md",[510,513,515,518,521],{"q":511,"a":512},"Mon app Supabase va-t-elle cesser de fonctionner le 30 octobre ?","Non. Chaque table qui existe le 30 octobre garde les accès qu'elle a, et Supabase a confirmé que ces grants ne seront pas retirés. Ce qui change, c'est la prochaine table créée après cette date. Elle est d'abord injoignable depuis votre app jusqu'à ce que quelqu'un lui accorde un accès. La première chose à casser sera donc la première nouvelle fonctionnalité qui a besoin d'une nouvelle table.",{"q":30,"a":514},"Cela signifie que le type de visiteur qui fait la requête n'a reçu aucun accès à cette table. Votre base a donc refusé avant même de regarder une seule ligne. Le message vient de Postgres, la base de données sur laquelle tourne Supabase, avec le code 42501, et arrive en général dans votre app sous forme de 401 ou de 403. Supabase y ajoute une indication qui nomme exactement l'instruction GRANT qui laisserait entrer ce visiteur.",{"q":516,"a":517},"Puis-je exécuter sans risque le GRANT que suggère l'erreur ?","Seulement une fois que la table a Row Level Security activé et une règle écrite pour elle. Un grant à anon permet à chaque visiteur de votre app de demander des lignes à la table, parce que la clé qui fait ces requêtes est livrée dans votre app. Avec une règle en place, ils obtiennent les lignes que la règle autorise. Sans règle et avec Row Level Security désactivé, ils les obtiennent toutes.",{"q":519,"a":520},"Ce changement touche-t-il Storage, la connexion ou mes edge functions ?","Storage et la connexion vivent dans leurs propres schémas, storage et auth, et Supabase indique que leurs grants et leurs réglages par défaut restent inchangés. Pour les edge functions, c'est différent. Une fonction qui utilise votre clé secrète a quand même besoin d'un grant sur toute nouvelle table, parce que les grants par défaut qui disparaissent couvraient aussi service_role, en plus des deux rôles qu'utilisent vos visiteurs.",{"q":522,"a":523},"Puis-je réactiver l'ancien comportement ?","Supabase documente une façon de le faire, par un réglage sur la page Data API du tableau de bord ou en SQL, et le déconseille. Une fois réactivé, chaque nouvelle table est accessible à chaque visiteur dès qu'elle existe, et Row Level Security est la seule chose entre un inconnu et ses lignes. C'est ainsi que fonctionnaient tous les projets avant le changement.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fcard-800x500.png",[526,527,528,529,530,531],"supabase permission denied for table","supabase grant nouvelles tables","supabase changement 30 octobre data api","supabase 42501","supabase exposer automatiquement les nouvelles tables","supabase default privileges schéma public",{},true,"Supabase \"permission denied for table\" après le 30 octobre","\u002Fblog\u002Fsupabase-permission-denied-for-table","2026-09-26",{"title":5,"description":506},"blog\u002Fsupabase-permission-denied-for-table",[540,541,542],"À partir du 30 octobre 2026, une nouvelle table de votre projet Supabase répond \"permission denied for table\" tant que personne ne lui a accordé d'accès. Les tables que vous avez déjà continuent de fonctionner exactement comme aujourd'hui.","Un grant décide si une requête atteint la table ou non. Row Level Security décide toujours quelles lignes elle récupère. Accorder à anon l'accès à une table sans règles rend chaque ligne lisible par n'importe qui.","Le changement ne ferme rien de ce qui est déjà ouvert. Vérifiez aujourd'hui ce qu'un inconnu peut lire, puis de nouveau après chaque table ajoutée.","0u-z-p_5Sx7NQQbXOOx2C_GsAS2wfy6aCOXi9z2m8-4",[545,551,557,563,569,575,581,587,593,599,605,611,617,624,630,635,636,642,648,654,660,666,672,678,684,690,696,702,708,714,720,726,732,738,744,750,756,762,768,774,780,786,792,798,804,810,815,821,827,833,839,845,851,857,862,868,874,879,884,890],{"path":546,"title":547,"description":548,"published":549,"category":503,"image":550,"draft":507},"\u002Fblog\u002Fbase44-security-scan","Scan de sécurité Base44 : ce que lui seul peut voir","Le scan de sécurité Base44 vérifie sept types de problèmes depuis l’intérieur. Voici la moitié que lui seul lit, et celle qu’il ne regarde jamais.","2026-10-10","\u002Fblog\u002Fbase44-security-scan\u002Fcard-800x500.png",{"path":552,"title":553,"description":554,"published":555,"category":503,"image":556,"draft":507},"\u002Fblog\u002Fapi-key-leaked-what-to-do","Votre clé API a fuité. L'ordre dans lequel agir","Une clé API a fuité et vous ne savez pas par quoi commencer. Toutes les clés de votre frontend n'en sont pas une, et l'ordre compte plus que la vitesse.","2026-10-09","\u002Fblog\u002Fapi-key-leaked-what-to-do\u002Fcard-800x500.png",{"path":558,"title":559,"description":560,"published":561,"category":503,"image":562,"draft":507},"\u002Fblog\u002Finfinite-recursion-in-policy-for-relation","\"Infinite recursion detected in policy\" sans désactiver RLS","\"Infinite recursion detected in policy for relation\" signifie que votre policy a interrogé la table qu'elle protège. Voici comment rompre le cercle.","2026-10-08","\u002Fblog\u002Finfinite-recursion-in-policy-for-relation\u002Fcard-800x500.png",{"path":564,"title":565,"description":566,"published":567,"category":503,"image":568,"draft":507},"\u002Fblog\u002Fno-api-key-found-in-request","\"No API key found in request\" sur Supabase, et le mauvais correctif","\"No API key found in request\" veut dire que votre requête est arrivée sans clé. La plupart des réponses pointent vers les règles de votre base.","2026-10-07","\u002Fblog\u002Fno-api-key-found-in-request\u002Fcard-800x500.png",{"path":570,"title":571,"description":572,"published":573,"category":503,"image":574,"draft":507},"\u002Fblog\u002Fis-base44-safe","Base44 est-il sûr ? Ce que 5 442 applications ont montré","Base44 est-il sûr ? Neuf vérifications sur 5 442 applications Base44 en ligne. Presque toutes ont eu un B, pour des raisons que personne n’a choisies.","2026-10-06","\u002Fblog\u002Fis-base44-safe\u002Fcard-800x500.png",{"path":576,"title":577,"description":578,"published":579,"category":503,"image":580,"draft":507},"\u002Fblog\u002Fmove-a-secret-to-an-edge-function","Cacher une clé API : la déplacer dans une Edge Function Supabase","Cacher une clé API veut dire la sortir du navigateur, et une Edge Function Supabase est le plus petit endroit où la mettre. Deux étapes comptent davantage.","2026-10-05","\u002Fblog\u002Fmove-a-secret-to-an-edge-function\u002Fcard-800x500.png",{"path":582,"title":583,"description":584,"published":585,"category":503,"image":586,"draft":507},"\u002Fblog\u002Fenv-file-exposed-on-your-server","Votre fichier .env est-il exposé ? Les douze chemins à vérifier","Votre fichier .env est-il exposé sur votre propre serveur web ? Douze adresses vous le disent, et une réponse signifie que tout son contenu est public.","2026-10-04","\u002Fblog\u002Fenv-file-exposed-on-your-server\u002Fcard-800x500.png",{"path":588,"title":589,"description":590,"published":591,"category":503,"image":592,"draft":507},"\u002Fblog\u002Fis-v0-safe","Sécurité de v0 : les 1 790 applications scannées ont toutes eu A","La sécurité de v0 mesurée sur 1 790 applications en ligne : toutes ont eu A. Seules 17 citaient une base de données, et c’est surtout cela que ce A mesure.","2026-10-03","\u002Fblog\u002Fis-v0-safe\u002Fcard-800x500.png",{"path":594,"title":595,"description":596,"published":597,"category":503,"image":598,"draft":507},"\u002Fblog\u002Fis-bolt-safe","Bolt est-il sûr ? Ce que 1 123 applications Bolt ont montré","Bolt est-il sûr ? Neuf vérifications sur 1 123 applications Bolt en ligne. L’hébergement était propre. Les trouvailles : des clés et des tables ouvertes.","2026-10-02","\u002Fblog\u002Fis-bolt-safe\u002Fcard-800x500.png",{"path":600,"title":601,"description":602,"published":603,"category":503,"image":604,"draft":507},"\u002Fblog\u002Fis-supabase-down-or-your-app","Supabase en panne, ou est-ce votre app ? Comment le savoir","Supabase est-il en panne, ou est-ce votre app ? Un projet en pause, une base pleine et un bug chez vous se ressemblent. Quatre vérifications les séparent.","2026-10-01","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fcard-800x500.png",{"path":606,"title":607,"description":608,"published":609,"category":503,"image":610,"draft":507},"\u002Fblog\u002Fdoes-supabase-encrypt-my-data","Supabase chiffre-t-il mes données ? Oui. Ce que cela arrête","Supabase chiffre-t-il les données ? Oui : AES-256 au repos, TLS en transit, SOC 2 et ISO 27001. Ce que couvre chacun, et la fuite qu'aucun n'arrête.","2026-09-30","\u002Fblog\u002Fdoes-supabase-encrypt-my-data\u002Fcard-800x500.png",{"path":612,"title":613,"description":614,"published":615,"category":503,"image":616,"draft":507},"\u002Fblog\u002Fsupabase-free-plan-limits","Limites du plan gratuit Supabase : ce qui se passe à chacune","Les limites du plan gratuit Supabase : 500 Mo de base, 5 Go d'egress, aucune sauvegarde. Ce qui se passe à chaque seuil, et ce que change Pro à $25.","2026-09-29","\u002Fblog\u002Fsupabase-free-plan-limits\u002Fcard-800x500.png",{"path":618,"title":619,"description":620,"published":621,"category":622,"image":623,"draft":507},"\u002Fblog\u002Ftest-your-supabase-backup","Testez votre sauvegarde Supabase avant d'en avoir besoin","Comment tester votre sauvegarde Supabase : la restaurer dans un projet d'exercice, compter les lignes, se connecter, chercher la ligne qui manque.","2026-09-28","Backups","\u002Fblog\u002Ftest-your-supabase-backup\u002Fcard-800x500.png",{"path":625,"title":626,"description":627,"published":628,"category":622,"image":629,"draft":507},"\u002Fblog\u002Fsupabase-backup-github-action","Sauvegarde Supabase gratuite avec une GitHub Action, et le piège","Une sauvegarde Supabase par GitHub Action est gratuite et convient à beaucoup d'apps. Le workflow, la bonne connection string et l'egress de chaque run.","2026-09-27","\u002Fblog\u002Fsupabase-backup-github-action\u002Fcard-800x500.png",{"path":631,"title":632,"description":633,"published":536,"category":622,"image":634,"draft":507},"\u002Fblog\u002Fdownload-your-supabase-backup","Pourquoi vous ne pouvez pas télécharger votre sauvegarde Supabase","Impossible de télécharger votre sauvegarde Supabase sur un projet récent : la copie quotidienne est physique. Comment le vérifier et garder la vôtre.","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fcard-800x500.png",{"path":535,"title":5,"description":506,"published":536,"category":503,"image":524,"draft":507},{"path":637,"title":638,"description":639,"published":640,"category":503,"image":641,"draft":507},"\u002Fblog\u002Fopen-api-endpoint-exposed","Un endpoint d'API ouvert est-il un problème de sécurité ?","Votre scan a signalé un endpoint d'API ouvert. Que cela compte dépend de ce qui est revenu, et la plupart de ceux trouvés étaient à la plateforme.","2026-09-25","\u002Fblog\u002Fopen-api-endpoint-exposed\u002Fcard-800x500.png",{"path":643,"title":644,"description":645,"published":646,"category":503,"image":647,"draft":507},"\u002Fblog\u002Flovable-security-scan","Scan de sécurité Lovable : ce qu’il ne peut pas prouver","Scan de sécurité Lovable : ce que vérifient le Quick scan et le Deep scan, quand chacun part, et la seule chose qu’un scan de l’intérieur ne prouve pas.","2026-09-24","\u002Fblog\u002Flovable-security-scan\u002Fcard-800x500.png",{"path":649,"title":650,"description":651,"published":652,"category":622,"image":653,"draft":507},"\u002Fblog\u002Fsupabase-backup-auth-users","Pourquoi votre dump Supabase ne contient aucun utilisateur","Lancez supabase db dump tout seul et vous obtenez la forme de votre base et aucune de ses lignes, sans le schéma auth où vivent vos utilisateurs.","2026-09-23","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":655,"title":656,"description":657,"published":658,"category":503,"image":659,"draft":507},"\u002Fblog\u002Fdomain-and-certificate-expiry","Domaine expiré, site hors ligne : ce qui se passe ensuite","Votre domaine a expiré et votre site est hors ligne. Le compte à rebours qui démarre, pourquoi le certificat est le moindre souci, et comment vérifier les deux.","2026-09-22","\u002Fblog\u002Fdomain-and-certificate-expiry\u002Fcard-800x500.png",{"path":661,"title":662,"description":663,"published":664,"category":503,"image":665,"draft":507},"\u002Fblog\u002Fis-lovable-safe","Lovable est-il sûr ? Ce que 18 554 applications Lovable ont montré","Lovable est-il sûr ? 18 554 applications, neuf vérifications. La plateforme était la plus propre des cinq. Les trouvailles étaient dans les applications.","2026-09-21","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",{"path":667,"title":668,"description":669,"published":670,"category":503,"image":671,"draft":507},"\u002Fblog\u002Fvibe-coded-app-security-checklist","La checklist de sécurité du vibe coding, en neuf vérifications","Une checklist de sécurité du vibe coding en neuf points, chacun vérifiable de l’extérieur sur votre appli en ligne, et chacun avec un test d’une ligne.","2026-09-20","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fcard-800x500.png",{"path":673,"title":674,"description":675,"published":676,"category":503,"image":677,"draft":507},"\u002Fblog\u002Fstripe-secret-key-in-frontend","Une clé secrète Stripe dans votre frontend peut déplacer de l’argent","Une clé secrète Stripe exposée dans votre frontend peut rembourser, débiter et lire chaque fiche client que vous détenez. Votre clé pk_live_ y a sa place.","2026-09-19","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcard-800x500.png",{"path":679,"title":680,"description":681,"published":682,"category":503,"image":683,"draft":507},"\u002Fblog\u002Fvite-and-next-public-env-vars","Variables d’environnement Vite exposées : le préfixe dit publier","Variables d’environnement Vite exposées : votre appli a fait ce que le préfixe demandait. VITE_ et NEXT_PUBLIC_ veulent dire publier, et l’IA ignorait le prix.","2026-09-18","\u002Fblog\u002Fvite-and-next-public-env-vars\u002Fcard-800x500.png",{"path":685,"title":686,"description":687,"published":688,"category":503,"image":689,"draft":507},"\u002Fblog\u002Fbase44-source-maps","Sécurité Base44 : ce qu’un scan signale, et ce qui dépend de vous","Sécurité Base44 sur 5 438 applis : trois signalements sur presque chacune sont ceux de la plateforme, la source map est le badge Base44, votre part est courte.","2026-09-17","\u002Fblog\u002Fbase44-source-maps\u002Fcard-800x500.png",{"path":691,"title":692,"description":693,"published":694,"category":503,"image":695,"draft":507},"\u002Fblog\u002Fis-cursor-ai-safe","Cursor AI est-il sûr ? L’éditeur, le code et l’appli publiée","Cursor AI est-il sûr ? Trois questions dans une recherche : ce que Cursor garde, ce que son code rate, et si l’appli que vous avez publiée est ouverte.","2026-09-16","\u002Fblog\u002Fis-cursor-ai-safe\u002Fcard-800x500.png",{"path":697,"title":698,"description":699,"published":700,"category":503,"image":701,"draft":507},"\u002Fblog\u002Fis-replit-safe","Replit est-il sûr ? Ce que 3 042 applications Replit nous ont montré","Replit est-il sûr ? 3 042 applications Replit en ligne, neuf vérifications externes. Les trouvailles étaient dans l’application publiée, pas chez l’hébergeur.","2026-09-15","\u002Fblog\u002Fis-replit-safe\u002Fcard-800x500.png",{"path":703,"title":704,"description":705,"published":706,"category":622,"image":707,"draft":507},"\u002Fblog\u002Fsupabase-storage-backup","Supabase storage backup : votre copie de base n'a aucun fichier","Un Supabase storage backup est une tâche à part. Les sauvegardes de la base gardent la liste de vos fichiers et aucun des fichiers, donc chaque upload casse.","2026-09-14","\u002Fblog\u002Fsupabase-storage-backup\u002Fcard-800x500.png",{"path":709,"title":710,"description":711,"published":712,"category":622,"image":713,"draft":507},"\u002Fblog\u002Fsupabase-point-in-time-recovery","Point-in-time recovery Supabase : prix et limites","Le point-in-time recovery de Supabase rembobine votre base à la seconde près sur la dernière semaine. $100 par mois en plus de Pro, et rien que la base.","2026-09-13","\u002Fblog\u002Fsupabase-point-in-time-recovery\u002Fcard-800x500.png",{"path":715,"title":716,"description":717,"published":718,"category":622,"image":719,"draft":507},"\u002Fblog\u002Fsupabase-project-paused-recover","Projet Supabase en pause ? Vos données sont toujours là","Supabase a mis votre projet en pause après une semaine sans activité. Rien n'est supprimé, Restaurer est à côté du nom, et vous avez un an pour cliquer.","2026-09-12","\u002Fblog\u002Fsupabase-project-paused-recover\u002Fcard-800x500.png",{"path":721,"title":722,"description":723,"published":724,"category":503,"image":725,"draft":507},"\u002Fblog\u002Fsafest-ai-app-builder","Quel builder d'app IA est le plus sûr ? 30 998 apps testées","Quel builder d'app IA est le plus sûr ? Nous avons scanné 30 998 apps actives de Lovable, Base44, Replit, v0 et Bolt. Ce n'est pas le builder qui décide.","2026-09-11","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcard-800x500.png",{"path":727,"title":728,"description":729,"published":730,"category":503,"image":731,"draft":507},"\u002Fblog\u002Fenable-rls-on-every-supabase-table","Activer Row Level Security sur chaque table Supabase, et le prouver","Activer Row Level Security dans Supabase sans politique ferme la table entièrement. Une politique sans le réglage ne fait rien. Voici le SQL, et le test.","2026-09-10","\u002Fblog\u002Fenable-rls-on-every-supabase-table\u002Fcard-800x500.png",{"path":733,"title":734,"description":735,"published":736,"category":503,"image":737,"draft":507},"\u002Fblog\u002Fsupabase-rls-disabled-in-public","Supabase \"RLS disabled in public\" : ce que l'alerte rate","Supabase signale \"RLS disabled in public\" comme une erreur. Elle ne dit rien de la politique de lecture qui laisse votre table tout aussi ouverte.","2026-09-09","\u002Fblog\u002Fsupabase-rls-disabled-in-public\u002Fcard-800x500.png",{"path":739,"title":740,"description":741,"published":742,"category":503,"image":743,"draft":507},"\u002Fblog\u002Frotate-supabase-service-role-key","Faire tourner une clé service_role Supabase qui a fuité","Supabase dit de colmater la fuite d'abord. D'autres guides disent de faire tourner la clé tout de suite. Tout dépend d'où votre clé service_role a fuité.","2026-09-08","\u002Fblog\u002Frotate-supabase-service-role-key\u002Fcard-800x500.png",{"path":745,"title":746,"description":747,"published":748,"category":503,"image":749,"draft":507},"\u002Fblog\u002Fvibe-coding-security-scanners-compared","Scanners de sécurité vibe coding comparés, le nôtre compris","Le meilleur scanner de sécurité vibe coding tient à trois questions qu'aucune liste de fonctions ne traite. Dix outils comparés, avec les prix.","2026-09-07","\u002Fblog\u002Fvibe-coding-security-scanners-compared\u002Fcard-800x500.png",{"path":751,"title":752,"description":753,"published":754,"category":503,"image":755,"draft":507},"\u002Fblog\u002Fsupabase-security-checker","Supabase security checker : les cinq vérifications à faire soi-même","Un Supabase security checker lit votre app publiée plutôt que les réglages de votre projet. Voici les cinq vérifications, et comment faire chacune vous-même.","2026-09-06","\u002Fblog\u002Fsupabase-security-checker\u002Fcard-800x500.png",{"path":757,"title":758,"description":759,"published":760,"category":503,"image":761,"draft":507},"\u002Fblog\u002Fvibe-coding-security-scanner","Scanner de sécurité vibe coding : ce qu’un scan d’URL rate","Un scanner de sécurité vibe coding lit votre app en ligne depuis l’extérieur. Ce qu’il couvre, les quatre choses qu’il ne voit pas, et comment lire le résultat.","2026-09-05","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fcard-800x500.png",{"path":763,"title":764,"description":765,"published":766,"category":503,"image":767,"draft":507},"\u002Fblog\u002Fmissing-security-headers","En-têtes de sécurité manquants : quand cela compte","Les en-têtes de sécurité manquants sont notre constat le plus fréquent. Contre quoi ils protègent, et quand ils comptent le moins dans votre rapport.","2026-09-04","\u002Fblog\u002Fmissing-security-headers\u002Fcard-800x500.png",{"path":769,"title":770,"description":771,"published":772,"category":503,"image":773,"draft":507},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","Votre clé API OpenAI est exposée dans votre frontend. Changez-la.","Une clé API OpenAI exposée dans votre frontend ne peut être liée à aucun domaine. Changez-la aujourd'hui, passez par votre serveur et plafonnez la dépense.","2026-09-03","\u002Fblog\u002Fopenai-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":775,"title":776,"description":777,"published":778,"category":503,"image":779,"draft":507},"\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps","Clé API exposée dans le frontend : ce que 30 998 applis livrent","Une clé API exposée dans votre frontend est le plus souvent une clé Google Maps. Nous avons scanné 30 998 applis vibe-codées et compté ce qui fuit vraiment.","2026-09-02","\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps\u002Fcard-800x500.png",{"path":781,"title":782,"description":783,"published":784,"category":622,"image":785,"draft":507},"\u002Fblog\u002Fsupabase-backup-tools-compared","Outils de sauvegarde Supabase comparés, le nôtre compris","Quatre familles d'outil de sauvegarde Supabase, ce que chacun copie vraiment, et quand une GitHub Action gratuite bat le fait de payer, nous compris.","2026-09-01","\u002Fblog\u002Fsupabase-backup-tools-compared\u002Fcard-800x500.png",{"path":787,"title":788,"description":789,"published":790,"category":503,"image":791,"draft":507},"\u002Fblog\u002Freplit-secrets-explained","Utiliser les secrets sur Replit, et ce qui est publié quand même","Utiliser les secrets sur Replit : en ajouter un, le relire, corriger les deux causes du undefined. Et les clés que l'outil Secrets ne peut pas protéger.","2026-08-31","\u002Fblog\u002Freplit-secrets-explained\u002Fcard-800x500.png",{"path":793,"title":794,"description":795,"published":796,"category":622,"image":797,"draft":507},"\u002Fblog\u002Fback-up-supabase-free-tier","Sauvegardes du plan gratuit Supabase : en faire une sans terminal","Le plan gratuit de Supabase ne fait aucune sauvegarde : la copie vient de vous. Comment la faire depuis le tableau de bord, et ce que le CSV oublie.","2026-08-30","\u002Fblog\u002Fback-up-supabase-free-tier\u002Fcard-800x500.png",{"path":799,"title":800,"description":801,"published":802,"category":503,"image":803,"draft":507},"\u002Fblog\u002Fis-supabase-secure","Supabase est-il sûr ? Oui. Votre projet est une autre question","Supabase est-il sûr ? La plateforme est auditée, chiffrée et testée en intrusion. Sa documentation dit où cela s'arrête et où vos réglages commencent.","2026-08-29","\u002Fblog\u002Fis-supabase-secure\u002Fcard-800x500.png",{"path":805,"title":806,"description":807,"published":808,"category":503,"image":809,"draft":507},"\u002Fblog\u002Fwhere-to-find-supabase-api-keys","Où trouver vos clés API Supabase : anon, service_role et URL","L'URL du projet, la clé anon et la clé service_role tiennent sur une page du tableau de bord. Voici où elle est, et laquelle des quatre va dans votre app.","2026-08-28","\u002Fblog\u002Fwhere-to-find-supabase-api-keys\u002Fcard-800x500.png",{"path":290,"title":811,"description":812,"published":813,"category":503,"image":814,"draft":507},"New row violates row-level security policy sur Supabase : et après ?","\"New row violates row-level security policy\" signifie que Supabase a refusé une écriture. Le correctif rapide rouvre la table à tout le monde.","2026-08-27","\u002Fblog\u002Fnew-row-violates-row-level-security-policy\u002Fcard-800x500.png",{"path":816,"title":817,"description":818,"published":819,"category":503,"image":820,"draft":507},"\u002Fblog\u002Fcors-wildcard-security-risk","Un joker CORS est-il un risque de sécurité ? Rarement.","Un joker CORS est-il un risque de sécurité ? C'est souvent le réglage par défaut de votre builder, et il ne livre rien que votre serveur ne donnait déjà.","2026-08-26","\u002Fblog\u002Fcors-wildcard-security-risk\u002Fcard-800x500.png",{"path":822,"title":823,"description":824,"published":825,"category":622,"image":826,"draft":507},"\u002Fblog\u002Fsupabase-branching-is-not-a-backup","Le branching Supabase n'est pas une sauvegarde de vos données.","Pourquoi le branching Supabase n'est pas une sauvegarde : une branche démarre sans vos données, et un merge ne déplace que le schéma. À quoi il sert vraiment.","2026-08-25","\u002Fblog\u002Fsupabase-branching-is-not-a-backup\u002Fcard-800x500.png",{"path":828,"title":829,"description":830,"published":831,"category":622,"image":832,"draft":507},"\u002Fblog\u002Fhow-to-restore-a-supabase-backup","Restaurer une sauvegarde Supabase, et ce qui casse après","Restaurer une sauvegarde Supabase depuis le tableau de bord ou un fichier de dump, ce que la restauration remplace et pourquoi votre app peut rester cassée.","2026-08-24","\u002Fblog\u002Fhow-to-restore-a-supabase-backup\u002Fcard-800x500.png",{"path":834,"title":835,"description":836,"published":837,"category":503,"image":838,"draft":507},"\u002Fblog\u002Fsupabase-storage-bucket-public","Votre bucket Supabase Storage est public. Est-ce un problème ?","Un bucket Supabase Storage public signifie que celui qui a l'URL d'un fichier peut l'ouvrir. Il ne signifie pas que quelqu'un peut lister ce qu'il contient.","2026-08-23","\u002Fblog\u002Fsupabase-storage-bucket-public\u002Fcard-800x500.png",{"path":840,"title":841,"description":842,"published":843,"category":503,"image":844,"draft":507},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","Une clé API Google dans votre frontend, est-ce un problème ?","Une clé API Google exposée dans votre frontend est la clé que notre scanner trouve le plus souvent, et en général tout va bien. Un réglage gratuit tranche.","2026-08-22","\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":846,"title":847,"description":848,"published":849,"category":622,"image":850,"draft":507},"\u002Fblog\u002Fai-agent-deleted-my-database","Un agent IA a supprimé mes données Supabase. Que puis-je récupérer ?","Un agent IA a supprimé des données de votre base. Ce que vous pouvez récupérer était déjà décidé avant, et les prochaines minutes décident du reste.","2026-08-21","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fcard-800x500.png",{"path":852,"title":853,"description":854,"published":855,"category":503,"image":856,"draft":507},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","Qui peut lire votre base Supabase ? Nous avons testé 3 680 apps","N'importe qui peut-il lire votre base de données Supabase sans se connecter ? Nous avons scanné 30 998 apps en ligne créées avec des builders IA.","2026-08-18","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcard-800x500.png",{"path":858,"title":859,"description":860,"published":855,"category":503,"image":861,"draft":507},"\u002Fblog\u002Fsource-maps-exposed-in-production","Source maps exposées : votre app publie son code original","Une source map exposée laisse n'importe qui lire le code original de votre app, commentaires compris. Le test de 30 secondes, et ce qui compte vraiment.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fcard-800x500.png",{"path":863,"title":864,"description":865,"published":866,"category":503,"image":867,"draft":507},"\u002Fblog\u002Fsupabase-new-api-keys","Les nouvelles clés API Supabase : laquelle va dans votre app ?","Supabase a remplacé anon et service_role par des clés publiables et secrètes. Laquelle a sa place dans votre app, et laquelle jamais ?","2026-08-12","\u002Fblog\u002Fsupabase-new-api-keys\u002Fcard-800x500.png",{"path":869,"title":870,"description":871,"published":872,"category":622,"image":873,"draft":507},"\u002Fblog\u002Fdoes-supabase-back-up-my-database","Supabase sauvegarde-t-il ma base de données ? Cela dépend du plan.","Supabase sauvegarde-t-il votre base de données ? Chaque jour sur les plans payants, jamais sur le gratuit. Comment savoir ce que vous avez vraiment.","2026-08-11","\u002Fblog\u002Fdoes-supabase-back-up-my-database\u002Fcard-800x500.png",{"path":363,"title":875,"description":876,"published":877,"category":503,"image":878,"draft":507},"Supabase Row Level Security est activé. La table reste publique.","Activer Supabase Row Level Security ne protège pas une table. Ce sont vos politiques, et celle qui a réparé votre app laisse peut-être entrer tout le monde.","2026-08-10","\u002Fblog\u002Fsupabase-rls-on-but-table-still-public\u002Fcard-800x500.png",{"path":880,"title":881,"description":882,"published":877,"category":622,"image":883,"draft":507},"\u002Fblog\u002Fversion-history-is-not-a-backup","L'historique des versions n'est pas une sauvegarde de vos données.","Lovable et Bolt tiennent un historique des versions de votre code. Votre base de données est un service à part, et revenir en arrière ne la ramène pas.","\u002Fblog\u002Fversion-history-is-not-a-backup\u002Fcard-800x500.png",{"path":885,"title":886,"description":887,"published":888,"category":622,"image":889,"draft":507},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","Trois façons de sauvegarder une base Supabase, et ce qui manque","Le tableau de bord, pg_dump et un service géré. Ce que chacun enregistre, ce qu'il laisse de côté sans le dire, et lequel survit à la perte du compte.","2026-08-09","\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database\u002Fcard-800x500.png",{"path":891,"title":892,"description":893,"published":888,"category":503,"image":894,"draft":507},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","Quelles clés API sont sûres côté navigateur, et lesquelles non","Votre clé anon Supabase est faite pour être publique. Votre clé service_role non, et elle ignore toutes les règles que vous posez. Comment les distinguer.","\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend\u002Fcard-800x500.png",1791618969093]