[{"data":1,"prerenderedAt":998},["ShallowReactive",2],{"blog-fr-api-key-leaked-what-to-do":3,"blog-index-fr":645},{"id":4,"title":5,"body":6,"category":601,"cover":602,"coverAlt":603,"description":604,"draft":605,"extension":606,"faq":607,"image":622,"keywords":623,"meta":632,"navigation":633,"ogTitle":634,"path":635,"published":636,"seo":637,"stem":638,"tldr":639,"updated":636,"__hash__":644},"blog_fr\u002Fblog\u002Fapi-key-leaked-what-to-do.md","Votre clé API a fuité. L'ordre dans lequel agir",{"type":7,"value":8,"toc":587},"minimark",[9,13,16,21,24,32,35,57,65,69,72,79,82,88,94,100,104,267,270,280,302,306,309,363,368,372,375,382,385,388,392,395,404,409,414,424,428,431,434,437,440,445,449,455,463,474,483,501,510,527,538,542,579],[10,11,12],"p",{},"Le message arrive le plus souvent par un rapport de scan, par GitHub qui vous\nannonce qu'un secret a été repéré dans un de vos dépôts, ou par quelqu'un qui a\nappuyé sur F12 sur votre site et vous a envoyé une capture d'écran. Quelle que\nsoit la route, vous savez maintenant qu'une clé API à vous a fuité et vous ne\nsavez pas par quoi commencer.",[10,14,15],{},"Voici ce que guide après guide rate : ils donnent la même réponse pour toutes\nles clés, et cette réponse est toujours de la faire tourner. Certaines de ces\nclés sont censées être publiques et ne demandent rien du tout. Parmi les autres,\ncertaines font grossir une facture pendant que vous lisez ceci, et d'autres ont\ncausé tous leurs dégâts le jour du déploiement. Ce sont trois situations\ndifférentes, et le premier geste n'est pas le même dans chacune.",[17,18,20],"h2",{"id":19},"dabord-est-ce-que-cette-clé-est-vraiment-un-secret","D'abord, est-ce que cette clé est vraiment un secret ?",[10,22,23],{},"Souvent non, et les chiffres penchent assez pour le dire franchement.",[10,25,26,27,31],{},"Nous avons scanné 31 056 applications en ligne et lu le JavaScript que chacune\nenvoie au navigateur. Le contrôle qui cherche des identifiants a pu répondre sur\ntoutes, et 1 332 sont revenues avec au moins une clé qui méritait un\nsignalement. ",[28,29,30],"strong",{},"1 142 de celles-là étaient des clés API Google",", le seul type du\nlot qui se trouve en général exactement là où il doit être.",[10,33,34],{},"Une clé API Google dans une page web, c'est ce qui fait marcher Google Maps. La\nclé dit quel projet paie, et ce qui empêche un inconnu de dépenser sur votre dos\nest la restriction posée sur la clé plutôt que son secret. La documentation de\nGoogle est nette sur les deux moitiés : \"Unrestricted API keys are insecure\", et\n\"You are financially responsible for charges caused by abuse of unrestricted API\nkeys.\" La réparation pour une clé pareille consiste à l'ouvrir dans la Cloud\nConsole et à poser deux restrictions, une qui nomme votre site et une qui nomme\nles API que vous appelez vraiment. La clé elle-même ne change jamais.",[10,36,37,38,42,43,46,47,50,51,56],{},"L'autre famille qui a sa place dans le navigateur, ce sont les clés publiables.\nUne clé Stripe ",[39,40,41],"code",{},"pk_live_",", et une clé Supabase ",[39,44,45],{},"sb_publishable_"," ou ",[39,48,49],{},"anon",", sont\nfaites pour être lues par chacun de vos visiteurs.\n",[52,53,55],"a",{"href":54},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","Quelles clés sont sûres dans votre frontend","\nest la version en quatre caractères de ce test.",[10,58,59,60,64],{},"Si vous préférez ne pas parcourir votre bundle à la main, notre scan gratuit lit\nvotre site en ligne, liste les clés qu'il voit de l'extérieur et dit de quelle\nnature est chacune : ",[52,61,63],{"href":62},"\u002Fsecurity-scanner","scanner votre application",". Cela prend\nune vingtaine de secondes et ne demande aucun compte.",[17,66,68],{"id":67},"ma-clé-api-a-fuité-par-quoi-je-commence","Ma clé API a fuité. Par quoi je commence ?",[10,70,71],{},"Déterminez si la clé a un compteur.",[10,73,74,75,78],{},"Une clé à compteur vous facture chaque requête. Celle de Google, celle d'OpenAI,\ncelle d'Anthropic, et une clé AWS avec les mauvaises permissions derrière, sont\ntoutes des compteurs : le trafic de quelqu'un d'autre atterrit sur votre\nfacture, à un rythme que cette personne choisit et que vous ne voyez pas. Une\nclé sans compteur lit ou écrit vos données à la place. Une clé Supabase\n",[39,76,77],{},"service_role"," en est l'exemple le plus clair, et rien là-dedans ne coûte de\nl'argent à l'heure.",[10,80,81],{},"Cette seule question fixe l'ordre.",[10,83,84,87],{},[28,85,86],{},"Si la clé a un compteur, arrêtez-la maintenant."," La fonctionnalité qui s'en\nservait est cassée jusqu'à ce que vous déployiez le remplacement, et c'est le\nbon échange, parce que la facture est la seule partie de cette histoire qui\ncontinue de grossir pendant que vous réfléchissez.",[10,89,90,93],{},[28,91,92],{},"Si la clé lit des données et qu'elle a été publiée dans votre bundle, la\nlecture a déjà eu lieu."," Chaque visiteur qui a chargé la page en a une copie,\net chaque robot parti chercher exactement cette chaîne de caractères aussi. Rien\nn'empire pendant que vous cherchez le bon ordre, et ce qu'il faut réussir, c'est\nde ne pas vous enfermer dehors de votre propre application en chemin.",[95,96],"diagram",{"alt":97,"caption":98,"src":99},"Deux voies, qui commencent chacune par la même clé. Dans la voie du haut, la clé mène à un cadran dont l'aiguille a bien tourné, puis à une pile de pièces, le tout en ambre. Dans la voie du bas, la clé mène à une table dont toutes les lignes sont allumées en rouge, et à la place du cadran il y a un cercle vide en pointillés.","La clé du haut vous coûte de l'argent pendant que vous lisez ceci. Celle du bas a fait tout ce qu'elle pouvait faire le jour du déploiement.","\u002Fblog\u002Fapi-key-leaked-what-to-do\u002Fdoes-it-have-a-meter-1600x660.png",[17,101,103],{"id":102},"ce-que-chaque-type-de-clé-peut-faire","Ce que chaque type de clé peut faire",[105,106,107,129],"table",{},[108,109,110],"thead",{},[111,112,113,117,120,123,126],"tr",{},[114,115,116],"th",{},"Clé",[114,118,119],{},"Dépense de l'argent",[114,121,122],{},"Lit vos données",[114,124,125],{},"Peut-on la restreindre à la place ?",[114,127,128],{},"Le remplacement casse-t-il l'application ?",[130,131,132,154,169,188,205,227,248],"tbody",{},[111,133,134,142,145,148,151],{},[135,136,137,138,46,140],"td",{},"Supabase ",[39,139,45],{},[39,141,49],{},[135,143,144],{},"Non",[135,146,147],{},"Seulement les lignes que vos règles autorisent",[135,149,150],{},"Sa place est dans le navigateur",[135,152,153],{},"Sans objet",[111,155,156,161,163,165,167],{},[135,157,158,159],{},"Stripe ",[39,160,41],{},[135,162,144],{},[135,164,144],{},[135,166,150],{},[135,168,153],{},[111,170,171,177,180,182,185],{},[135,172,173,174],{},"Google ",[39,175,176],{},"AIza…",[135,178,179],{},"Oui, sur votre facture Cloud",[135,181,144],{},[135,183,184],{},"Oui, et Google dit d'essayer ça d'abord",[135,186,187],{},"La restreindre non. La faire tourner, oui.",[111,189,190,193,196,199,202],{},[135,191,192],{},"Clé OpenAI ou Anthropic",[135,194,195],{},"Oui, au rythme d'un inconnu",[135,197,198],{},"Les fichiers et assistants du projet",[135,200,201],{},"Il n'existe pas de variante publiable",[135,203,204],{},"Oui, jusqu'à ce qu'un serveur à vous la détienne",[111,206,207,215,218,221,224],{},[135,208,158,209,46,212],{},[39,210,211],{},"sk_live_",[39,213,214],{},"rk_live_",[135,216,217],{},"Oui",[135,219,220],{},"Oui, clients et dossiers de paiement",[135,222,223],{},"Une clé restreinte est la version étroite",[135,225,226],{},"Non, il y a une fenêtre de sept jours",[111,228,229,236,239,242,245],{},[135,230,231,232,235],{},"AWS ",[39,233,234],{},"AKIA…"," et sa moitié secrète",[135,237,238],{},"Oui, y compris du calcul à l'heure",[135,240,241],{},"Vos buckets S3",[135,243,244],{},"Deactivate, et c'est réversible",[135,246,247],{},"Non, vous pouvez détenir deux clés à la fois",[111,249,250,257,259,262,264],{},[135,251,137,252,46,255],{},[39,253,254],{},"sb_secret_",[39,256,77],{},[135,258,144],{},[135,260,261],{},"Chaque ligne de chaque table",[135,263,144],{},[135,265,266],{},"Oui, sur un ancien projet",[10,268,269],{},"Deux remarques sur ce tableau, parce que toutes les deux changent la suite.",[10,271,272,273,276,277,279],{},"Une clé d'accès AWS, ce sont deux chaînes de caractères, un identifiant qui\ncommence par ",[39,274,275],{},"AKIA"," et une moitié secrète, et AWS exige les deux ensemble pour\nsigner une requête. Une chaîne ",[39,278,275],{}," seule dans un bundle n'est donc pas\nutilisable, et la raison de la traiter comme urgente quand même, c'est que les\ndeux moitiés sont presque toujours collées ensemble. Ouvrez le fichier et\ncherchez la seconde avant de décider dans quel cas vous êtes.",[10,281,282,283,287,288,287,292,296,297,301],{},"Le détail par fournisseur vit chez chaque fournisseur :\n",[52,284,286],{"href":285},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","une clé OpenAI",",\n",[52,289,291],{"href":290},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","une clé API Google",[52,293,295],{"href":294},"\u002Fblog\u002Fstripe-secret-key-in-frontend","une clé secrète Stripe"," et\n",[52,298,300],{"href":299},"\u002Fblog\u002Frotate-supabase-service-role-key","une clé service_role Supabase",", la\nseule qui ait une procédure à elle.",[17,303,305],{"id":304},"arrêter-la-clé-et-remplacer-la-clé-sont-deux-boutons-différents","Arrêter la clé et remplacer la clé sont deux boutons différents",[10,307,308],{},"Chaque fournisseur du tableau vous donne les deux, et la panique attrape le\nsecond.",[310,311,312,319,338,347],"ul",{},[313,314,315,318],"li",{},[28,316,317],{},"Google."," Restreindre une clé ne change pas la chaîne de caractères, votre\napplication continue donc de marcher. Leur guide de sécurité met cela avant\ntout le reste : \"First try to restrict your API keys\", et la rotation est la\ntroisième option en descendant, pour quand une restriction n'est pas possible.",[313,320,321,324,325,328,329,333,334,337],{},[28,322,323],{},"Stripe."," ",[28,326,327],{},"Expire key"," arrête une clé toute seule, sans remplacement.\nLeur position sur le moment de s'en servir ne contient aucune réserve : \"If a\nrestricted or secret API key is exposed or compromised, rotate it immediately\neven if you aren't sure anyone saw it.\" Ils séparent aussi les deux mots que\ntout le monde confond. L'",[330,331,332],"em",{},"exposure"," est le fait que la clé soit devenue\nvisible là où elle n'aurait pas dû l'être. La ",[330,335,336],{},"compromise"," est la preuve que\nquelqu'un s'en est servi.",[313,339,340,324,343,346],{},[28,341,342],{},"AWS.",[28,344,345],{},"Deactivate"," est la commande, et sa partie utile est qu'elle se\ndéfait. AWS dit de ne pas supprimer l'ancienne clé du tout tant que vous\nvérifiez encore : \"we recommend that you do not immediately delete the first\naccess key. Instead, choose Actions and then choose Deactivate.\" Si quelque\nchose que vous aviez oublié en a encore besoin, vous la rallumez.",[313,348,349,352,353,355,356,358,359,362],{},[28,350,351],{},"Supabase, sur un ancien projet."," Il y a un interrupteur, et il couvre les\ndeux clés historiques. ",[39,354,49],{}," et ",[39,357,77],{}," sont signées par le même\nsecret : désactiver celle dont vous voulez vous débarrasser arrête aussi celle\ndont votre frontend se sert.\n",[52,360,361],{"href":299},"Les quatre étapes qui évitent ça"," se\nlisent mieux avant de toucher à l'interrupteur qu'après.",[95,364],{"alt":365,"caption":366,"src":367},"Un tableau avec deux interrupteurs. Celui de gauche est basculé vers le bas et dessiné en ambre, avec une clé barrée à côté. Celui de droite est levé et dessiné en turquoise, avec une clé à côté et une flèche qui mène à une fenêtre d'application qui fonctionne.","Deux commandes, et seule celle de gauche ferme le trou. Laquelle vous attrapez en premier est la décision dont parle cet article.","\u002Fblog\u002Fapi-key-leaked-what-to-do\u002Ftwo-switches-1600x600.png",[17,369,371],{"id":370},"lire-le-journal-sur-la-période-où-la-clé-était-dehors","Lire le journal sur la période où la clé était dehors",[10,373,374],{},"La fenêtre s'ouvre avec le déploiement qui a livré la clé et se referme au\nmoment où vous l'avez arrêtée. C'est sur cette plage de dates que vous filtrez\nle journal du fournisseur.",[10,376,377,378,381],{},"Chaque fournisseur du tableau en tient un. Stripe affiche les journaux de\nrequêtes d'une seule clé, depuis le menu de débordement à côté de cette clé sur\nla page des API Keys. AWS pose une date de dernière utilisation sur chaque clé\nd'accès dans la console IAM sans aucune configuration, et enregistre les appels\neux-mêmes dans CloudTrail. Google trace l'usage par clé dans la Cloud Console,\nce qui est aussi la lecture que son propre guide vous demande de faire avant de\nchanger quoi que ce soit à une clé. Supabase conserve des journaux d'API et de\nbase de données pour le projet, et\n",[52,379,380],{"href":299},"comment réduire la fenêtre sur une clé Supabase","\ndit quoi y chercher.",[10,383,384],{},"Ce que vous cherchez, c'est du trafic que vous ne pouvez pas expliquer : des\nrequêtes vers des tables ou des endpoints que votre application ne touche\njamais, du volume à des heures où personne ne s'en servait, des suppressions que\npersonne n'a faites. Regardez ensuite les données elles-mêmes, parce qu'un\nmessage de support à propos d'un enregistrement qui a changé tout seul est la\nfaçon dont la plupart de ces histoires se découvrent, et il arrive des semaines\nplus tard.",[10,386,387],{},"Souvent vous ne pouvez pas en avoir le cœur net, et Stripe en dit autant de sa\npropre détection : \"Stripe doesn't guarantee detection of all exposed or\ncompromised keys.\" Donc \"rien dans le journal\" est un résultat, et il vaut la\npeine d'être noté avec la plage de dates à côté.",[17,389,391],{"id":390},"faire-tourner-la-clé-sans-mettre-lapplication-à-larrêt","Faire tourner la clé sans mettre l'application à l'arrêt",[10,393,394],{},"Trois des quatre fournisseurs ci-dessus vous laissent une fenêtre où l'ancienne\net la nouvelle clé fonctionnent toutes les deux, et c'est ce qui évite la panne.",[10,396,397,399,400,403],{},[28,398,323],{}," \"When you rotate a key in the Dashboard, both the old and new keys\nwork for up to 7 days.\" La boîte de dialogue a aussi une option ",[28,401,402],{},"Now",", et leur\ndocumentation est explicite : si vous la choisissez, l'ancienne clé est\nsupprimée. C'est le bouton de l'urgence à compteur plutôt que celui d'une\nmigration tranquille. Leur conseil sur le moment de lâcher l'ancienne est une\nmesure plutôt qu'une date : vérifiez ses journaux de requêtes et ne la faites\nexpirer qu'une fois son volume de requêtes à zéro depuis quelques heures ou\nquelques jours.",[10,405,406,408],{},[28,407,317],{}," La rotation crée la nouvelle clé en lui donnant toutes les\nrestrictions de l'ancienne et, dans leurs termes, \"both the old and new key are\naccepted\" pendant que vous déplacez vos applications. Si vous supprimez\nl'ancienne trop tôt et que quelque chose casse, il y a un retour possible : une\nclé API Google supprimée peut être restaurée dans les 30 jours.",[10,410,411,413],{},[28,412,342],{}," La séquence est dans leur documentation et elle commence par la\nnouvelle clé : créez la deuxième clé d'accès pendant que la première est encore\nactive, déplacez chaque application dessus, vérifiez la date de dernière\nutilisation de l'ancienne, désactivez-la, et supprimez-la seulement après. Un\nplafond à prévoir : un utilisateur IAM ne peut détenir que deux clés d'accès au\nmaximum, donc une troisième application encore sur une ancienne clé n'a nulle\npart où aller.",[10,415,416,418,419,355,421,423],{},[28,417,351],{}," Pas de fenêtre. La rotation directe des clés\nhistoriques ",[39,420,49],{},[39,422,77],{}," n'est plus prise en charge, donc en\ninvalider une est une migration vers la nouvelle paire de clés, et l'ordre des\nquatre étapes est ce qui garde l'application debout.",[17,425,427],{"id":426},"elle-est-toujours-dans-votre-historique-git","Elle est toujours dans votre historique Git",[10,429,430],{},"Elle y est, et la documentation GitHub sur le sujet commence par vous envoyer\nailleurs.",[10,432,433],{},"Leur page sur la suppression de données sensibles vous renvoie à la clé : \"if\nthe sensitive data you need to remove is a secret (e.g.\npassword\u002Ftoken\u002Fcredential), as is often the case, then as a first step you need\nto revoke and\u002For rotate that secret\", puis : \"Once the secret is revoked or\nrotated, it can no longer be used for access, and that may be sufficient to\nsolve your problem. Going through the extra steps to rewrite the history and\nremove the secret may not be warranted.\"",[10,435,436],{},"La raison qu'ils en donnent, c'est ce qu'un force push n'atteint pas. Après\navoir réécrit votre historique, les anciens commits sont toujours là \"In any\nclones or forks of your repository\" et \"Directly via their SHA-1 hashes in\ncached views on GitHub\". Le support peut effacer les vues en cache et les\nréférences dans les pull requests si vous le demandez, et il pose sa propre\nlimite : il \"will only assist in the removal of sensitive data in cases where we\ndetermine that the risk can't be mitigated by rotating affected credentials.\" Un\nfork garde sa copie dans tous les cas, et GitHub ne peut pas vous donner les\ncoordonnées de son propriétaire.",[10,438,439],{},"L'ordre qu'ils décrivent est donc l'ordre pratique : révoquer la clé, puis\ndécider si réécrire l'historique vaut ses effets secondaires. Révoquer atteint\ndes copies qu'une réécriture n'atteint pas, dont celle d'un clone dont vous\nignorez l'existence et celle d'une capture d'écran que quelqu'un a gardée.",[95,441],{"alt":442,"caption":443,"src":444},"Trois documents identiques et pâles, un fork, le clone de quelqu'un et une vue en cache, chacun tenant encore la même clé ambre. Une seule ligne turquoise traverse l'image et barre les trois clés.","La même clé, en trois copies que vous ne pouvez pas supprimer. La révoquer les barre toutes les trois d'un coup.","\u002Fblog\u002Fapi-key-leaked-what-to-do\u002Fone-line-covers-every-copy-1600x520.png",[17,446,448],{"id":447},"empêcher-la-prochaine-dentrer-dans-le-bundle","Empêcher la prochaine d'entrer dans le bundle",[10,450,451,454],{},[28,452,453],{},"Une clé entre dans votre bundle par un déploiement, et les déploiements\ncontinuent."," Chacun d'eux est une occasion de plus pour qu'une valeur que vous\navez mise dans un panneau de secrets finisse dans un fichier que le navigateur\ntélécharge. C'est pour ça qu'un contrôle fait le mois dernier décrit\nl'application du mois dernier.",[10,456,457],{},[28,458,459,462],{},[52,460,461],{"href":62},"Notre scan gratuit"," répond à la question qui vous a amené\nici.",[310,464,465,468,471],{},[313,466,467],{},"les neuf contrôles sur votre URL en ligne, en une vingtaine de secondes",[313,469,470],{},"chaque clé qu'il voit de l'extérieur, classée plutôt que seulement repérée",[313,472,473],{},"une note et les constats, sans compte",[10,475,476],{},[28,477,478,482],{},[52,479,481],{"href":480},"\u002Fpricing","Reeve Monitor"," relance ces contrôles sans que vous le demandiez.",[310,484,485,488,495,498],{},[313,486,487],{},"les neuf contrôles toutes les heures, sur jusqu'à trois applications",[313,489,490,491,494],{},"un message quand un résultat ",[28,492,493],{},"change",", pour que la clé partie dans le\ndéploiement de cette nuit n'attende pas que vous alliez voir",[313,496,497],{},"si l'application répond, toutes les 60 secondes",[313,499,500],{},"un rapport mensuel de ce qu'il a vu",[10,502,503],{},[28,504,505,509],{},[52,506,508],{"href":507},"\u002Fsupabase-backups","Reeve Care"," garde une copie de votre base de données\nSupabase, pour les clés qui peuvent écrire.",[310,511,512,515,518,521,524],{},[313,513,514],{},"une copie chiffrée chaque nuit, conservée là où votre projet ne peut pas aller",[313,516,517],{},"chaque copie vérifiée avant de compter, en comptant les lignes de chaque table",[313,519,520],{},"une restauration en un clic quand vous en avez besoin",[313,522,523],{},"vos fichiers téléversés aussi, dès que vous connectez un identifiant Storage",[313,525,526],{},"tout ce que fait Monitor",[10,528,529,530,532,533,537],{},"Une clé qui a fuité et qui ne peut que lire laisse vos données là où elles\nétaient. Une clé ",[39,531,77],{},", ou une clé AWS avec des droits d'écriture, peut\nvider une table, et aucune rotation après coup ne ramène les lignes.\n",[52,534,536],{"href":535},"\u002Fblog\u002Fai-agent-deleted-my-database","Le jour où un agent IA a supprimé une base de données de production","\nraconte à quoi cela ressemble de l'intérieur.",[17,539,541],{"id":540},"ce-quil-faut-faire-tout-de-suite","Ce qu'il faut faire tout de suite",[543,544,545],"key-takeaways",{},[310,546,547,558,561,570,573,576],{},[313,548,549,550,46,552,554,555,557],{},"Identifiez la clé avant d'y toucher. Une clé Supabase ",[39,551,49],{},[39,553,45],{}," et une clé Stripe ",[39,556,41],{}," sont à leur place, et sur les 1 332 applications où nous avons trouvé une clé méritant un signalement, 1 142 avaient une clé API Google, qui demande une restriction plutôt qu'une rotation.",[313,559,560],{},"Demandez-vous si elle a un compteur. Si les requêtes de quelqu'un d'autre atterrissent sur votre facture, arrêtez la clé maintenant et laissez la fonctionnalité casser.",[313,562,563,564,566,567,569],{},"Servez-vous de la commande qui arrête autant que de celle qui remplace : ",[28,565,327],{}," chez Stripe, ",[28,568,345],{}," chez AWS, une restriction par site et par API chez Google.",[313,571,572],{},"Remplacez-la ensuite dans la fenêtre du fournisseur. Stripe vous donne sept jours avec les deux clés en service, Google accepte les deux pendant la migration, et AWS vous laisse détenir deux clés d'accès à la fois.",[313,574,575],{},"Lisez le journal du fournisseur sur la période entre le déploiement et l'arrêt, et notez ce que vous avez trouvé, y compris \"rien\".",[313,577,578],{},"Gardez l'historique Git pour la fin. Une fois la clé révoquée, le guide de GitHub dit que réécrire l'historique ne se justifie peut-être pas du tout.",[10,580,581,582,586],{},"Si vous préférez parcourir tout cela sous forme de liste, la\n",[52,583,585],{"href":584},"\u002Fchecklist","checklist de sécurité en 10 minutes"," couvre ce sujet et les autres\nchoses qu'il vaut mieux couper dans une application qui vient de sortir.",{"title":588,"searchDepth":589,"depth":589,"links":590},"",3,[591,593,594,595,596,597,598,599,600],{"id":19,"depth":592,"text":20},2,{"id":67,"depth":592,"text":68},{"id":102,"depth":592,"text":103},{"id":304,"depth":592,"text":305},{"id":370,"depth":592,"text":371},{"id":390,"depth":592,"text":391},{"id":426,"depth":592,"text":427},{"id":447,"depth":592,"text":448},{"id":540,"depth":592,"text":541},"Bases de la sécurité","\u002Fblog\u002Fapi-key-leaked-what-to-do\u002Fcover-1200x630.png","Une carte d'accès portant une clé, posée devant un tableau d'interrupteurs dont le premier a été basculé vers le bas, en position arrêt.","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.",false,"md",[608,610,613,616,619],{"q":68,"a":609},"Déterminez si la clé peut dépenser de l'argent. Une clé qui vous facture chaque requête vous coûte quelque chose en ce moment même : arrêtez-la tout de suite et acceptez que la fonctionnalité qui s'en sert casse quelques minutes. Une clé qui ne fait que lire des données a déjà été lue si elle était publique, alors prenez le temps de faire le remplacement dans un ordre qui ne vous enferme pas dehors de votre propre application.",{"q":611,"a":612},"Révoquer ou faire tourner la clé en premier ?","Révoquez en premier si la clé a un compteur. Arrêter l'ancienne clé et en émettre une nouvelle sont deux commandes séparées chez chaque fournisseur, et seule la première ferme le trou. L'exception, c'est une clé que vous pouvez restreindre à la place : Google vous dit d'essayer une restriction par site et par API avant même de faire tourner une clé API Google.",{"q":614,"a":615},"Comment savoir si quelqu'un a utilisé ma clé ?","Réduisez la fenêtre à la période entre le déploiement qui a livré la clé et le moment où vous l'avez arrêtée, puis lisez le journal du fournisseur sur cette plage. Stripe affiche les journaux de requêtes par clé, AWS affiche une date de dernière utilisation sur la clé d'accès et enregistre les appels dans CloudTrail, Google trace l'usage par clé, et Supabase conserve des journaux d'API et de base de données. Vous cherchez des requêtes vers des choses que votre application ne touche jamais et du trafic à des heures où personne ne s'en servait. Souvent vous ne pouvez pas en avoir le cœur net, et c'est un résultat normal.",{"q":617,"a":618},"Est-ce que faire tourner ma clé va casser mon application ?","En général non, si vous utilisez la fenêtre que le fournisseur vous donne. Stripe garde l'ancienne et la nouvelle clé en service ensemble pendant sept jours. Google émet la nouvelle clé avec les restrictions de l'ancienne et accepte les deux pendant votre migration. AWS vous laisse détenir deux clés d'accès à la fois, donc la nouvelle est déjà active avant que l'ancienne parte. L'exception est un ancien projet Supabase, où l'interrupteur qui désactive les clés historiques emporte avec lui la clé de votre frontend.",{"q":620,"a":621},"La clé est dans mon historique Git. Supprimer le fichier suffit-il ?","Non, et réécrire l'historique n'est probablement pas la réponse non plus. La documentation GitHub dit de révoquer ou de faire tourner le secret d'abord, et qu'une fois que c'est fait, se lancer dans la réécriture de l'historique ne se justifie pas forcément. Un force push n'atteint pas les copies dans les forks et les clones, ni les vues en cache accessibles par le hash du commit. Rendre la clé inutilisable couvre toutes les copies d'un coup.","\u002Fblog\u002Fapi-key-leaked-what-to-do\u002Fcard-800x500.png",[624,625,626,627,628,629,630,631],"clé api fuitée que faire","clé api exposée","ma clé api est publique","clé api compromise","révoquer une clé api","clé api trouvée sur github","clé api dans le frontend","que peut faire quelqu un avec ma clé api",{},true,"Votre clé API a fuité. Que faire, dans l'ordre","\u002Fblog\u002Fapi-key-leaked-what-to-do","2026-10-09",{"title":5,"description":604},"blog\u002Fapi-key-leaked-what-to-do",[640,641,642,643],"Si une clé API a fuité, ce qu'il faut faire en premier dépend de la clé. Les clés publiables ont leur place dans votre frontend et ne demandent rien.","Pour un vrai secret, déterminez si la clé peut dépenser de l'argent. C'est la seule partie de cette histoire sur laquelle tourne une horloge.","Arrêter une clé et remplacer une clé sont deux commandes distinctes chez chaque fournisseur, et la plupart vous laissent une fenêtre où les deux clés fonctionnent.","Ensuite, lisez le journal du fournisseur sur la période où la clé était dehors, et laissez votre historique Git tranquille tant que la clé n'est pas morte.","fvo9ZvFGCHUI4Klby8vSmVZ2fkdde3lXoaVpttemKso",[646,652,658,659,665,671,677,683,689,695,701,707,713,719,726,732,738,743,749,755,761,767,773,779,784,790,796,802,808,814,820,826,832,838,844,849,855,861,867,873,878,884,890,896,902,908,914,920,926,932,938,944,949,954,960,965,971,977,983,988,994],{"path":647,"title":648,"description":649,"published":650,"category":601,"image":651,"draft":605},"\u002Fblog\u002Fstorage-upload-violates-row-level-security","\"Row-level security policy for table objects\" à l'upload","\"New row violates row-level security policy for table objects\" signifie que votre upload n'a pas de règle insert. Rendre le bucket public n'en ajoute aucune.","2026-10-11","\u002Fblog\u002Fstorage-upload-violates-row-level-security\u002Fcard-800x500.png",{"path":653,"title":654,"description":655,"published":656,"category":601,"image":657,"draft":605},"\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":635,"title":5,"description":604,"published":636,"category":601,"image":622,"draft":605},{"path":660,"title":661,"description":662,"published":663,"category":601,"image":664,"draft":605},"\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":666,"title":667,"description":668,"published":669,"category":601,"image":670,"draft":605},"\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":672,"title":673,"description":674,"published":675,"category":601,"image":676,"draft":605},"\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":678,"title":679,"description":680,"published":681,"category":601,"image":682,"draft":605},"\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":684,"title":685,"description":686,"published":687,"category":601,"image":688,"draft":605},"\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":690,"title":691,"description":692,"published":693,"category":601,"image":694,"draft":605},"\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":696,"title":697,"description":698,"published":699,"category":601,"image":700,"draft":605},"\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":702,"title":703,"description":704,"published":705,"category":601,"image":706,"draft":605},"\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":708,"title":709,"description":710,"published":711,"category":601,"image":712,"draft":605},"\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":714,"title":715,"description":716,"published":717,"category":601,"image":718,"draft":605},"\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":720,"title":721,"description":722,"published":723,"category":724,"image":725,"draft":605},"\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":727,"title":728,"description":729,"published":730,"category":724,"image":731,"draft":605},"\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":733,"title":734,"description":735,"published":736,"category":724,"image":737,"draft":605},"\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.","2026-09-26","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fcard-800x500.png",{"path":739,"title":740,"description":741,"published":736,"category":601,"image":742,"draft":605},"\u002Fblog\u002Fsupabase-permission-denied-for-table","Supabase \"permission denied for table\" : le grant manquant","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é.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fcard-800x500.png",{"path":744,"title":745,"description":746,"published":747,"category":601,"image":748,"draft":605},"\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":750,"title":751,"description":752,"published":753,"category":601,"image":754,"draft":605},"\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":756,"title":757,"description":758,"published":759,"category":724,"image":760,"draft":605},"\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":762,"title":763,"description":764,"published":765,"category":601,"image":766,"draft":605},"\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":768,"title":769,"description":770,"published":771,"category":601,"image":772,"draft":605},"\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":774,"title":775,"description":776,"published":777,"category":601,"image":778,"draft":605},"\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":294,"title":780,"description":781,"published":782,"category":601,"image":783,"draft":605},"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":785,"title":786,"description":787,"published":788,"category":601,"image":789,"draft":605},"\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":791,"title":792,"description":793,"published":794,"category":601,"image":795,"draft":605},"\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":797,"title":798,"description":799,"published":800,"category":601,"image":801,"draft":605},"\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":803,"title":804,"description":805,"published":806,"category":601,"image":807,"draft":605},"\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":809,"title":810,"description":811,"published":812,"category":724,"image":813,"draft":605},"\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":815,"title":816,"description":817,"published":818,"category":724,"image":819,"draft":605},"\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":821,"title":822,"description":823,"published":824,"category":724,"image":825,"draft":605},"\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":827,"title":828,"description":829,"published":830,"category":601,"image":831,"draft":605},"\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":833,"title":834,"description":835,"published":836,"category":601,"image":837,"draft":605},"\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":839,"title":840,"description":841,"published":842,"category":601,"image":843,"draft":605},"\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":299,"title":845,"description":846,"published":847,"category":601,"image":848,"draft":605},"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":850,"title":851,"description":852,"published":853,"category":601,"image":854,"draft":605},"\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":856,"title":857,"description":858,"published":859,"category":601,"image":860,"draft":605},"\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":862,"title":863,"description":864,"published":865,"category":601,"image":866,"draft":605},"\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":868,"title":869,"description":870,"published":871,"category":601,"image":872,"draft":605},"\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":285,"title":874,"description":875,"published":876,"category":601,"image":877,"draft":605},"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":879,"title":880,"description":881,"published":882,"category":601,"image":883,"draft":605},"\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":885,"title":886,"description":887,"published":888,"category":724,"image":889,"draft":605},"\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":891,"title":892,"description":893,"published":894,"category":601,"image":895,"draft":605},"\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":897,"title":898,"description":899,"published":900,"category":724,"image":901,"draft":605},"\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":903,"title":904,"description":905,"published":906,"category":601,"image":907,"draft":605},"\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":909,"title":910,"description":911,"published":912,"category":601,"image":913,"draft":605},"\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":915,"title":916,"description":917,"published":918,"category":601,"image":919,"draft":605},"\u002Fblog\u002Fnew-row-violates-row-level-security-policy","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":921,"title":922,"description":923,"published":924,"category":601,"image":925,"draft":605},"\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":927,"title":928,"description":929,"published":930,"category":724,"image":931,"draft":605},"\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":933,"title":934,"description":935,"published":936,"category":724,"image":937,"draft":605},"\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":939,"title":940,"description":941,"published":942,"category":601,"image":943,"draft":605},"\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":290,"title":945,"description":946,"published":947,"category":601,"image":948,"draft":605},"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":535,"title":950,"description":951,"published":952,"category":724,"image":953,"draft":605},"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":955,"title":956,"description":957,"published":958,"category":601,"image":959,"draft":605},"\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":961,"title":962,"description":963,"published":958,"category":601,"image":964,"draft":605},"\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":966,"title":967,"description":968,"published":969,"category":601,"image":970,"draft":605},"\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":972,"title":973,"description":974,"published":975,"category":724,"image":976,"draft":605},"\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":978,"title":979,"description":980,"published":981,"category":601,"image":982,"draft":605},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","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":984,"title":985,"description":986,"published":981,"category":724,"image":987,"draft":605},"\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":989,"title":990,"description":991,"published":992,"category":724,"image":993,"draft":605},"\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":54,"title":995,"description":996,"published":992,"category":601,"image":997,"draft":605},"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",1791705960618]