[{"data":1,"prerenderedAt":726},["ShallowReactive",2],{"blog-fr-stripe-secret-key-in-frontend":3,"blog-index-fr":483},{"id":4,"title":5,"body":6,"category":436,"cover":437,"coverAlt":438,"description":439,"draft":440,"extension":441,"faq":442,"image":461,"keywords":462,"meta":470,"navigation":471,"ogTitle":472,"path":473,"published":474,"seo":475,"stem":476,"tldr":477,"updated":474,"__hash__":482},"blog_fr\u002Fblog\u002Fstripe-secret-key-in-frontend.md","Une clé secrète Stripe dans votre frontend peut déplacer de l’argent",{"type":7,"value":8,"toc":424},"minimark",[9,18,33,42,47,55,58,63,68,71,75,78,182,193,203,207,210,213,219,226,229,232,236,239,273,276,281,284,287,291,294,301,304,307,311,322,331,336,339,355,359,392,395,402],[10,11,12,13,17],"p",{},"Ouvrez votre appli en production dans un navigateur, affichez le code source de\nla page et cherchez-y ",[14,15,16],"code",{},"sk_live_",". Si une longue chaîne remonte, une clé secrète\nStripe est exposée dans votre frontend, et tous les visiteurs que vous avez\njamais eus auraient pu la copier.",[10,19,20,21,25,26,29,30,32],{},"Voici ce que les conseils généraux sur les clés d’API se trompent : Stripe vous\ndonne deux clés actives, elles se ressemblent presque trait pour trait, et\n",[22,23,24],"strong",{},"l’une des deux est censée se trouver dans votre appli."," La clé qui commence\npar ",[14,27,28],{},"pk_live_"," y a sa place. La clé qui commence par ",[14,31,16],{}," dispose, selon\nles mots mêmes de Stripe, de droits illimités sur toutes les API. Elles\ndiffèrent d’un caractère au milieu d’une longue chaîne, et c’est l’essentiel de\nla raison pour laquelle cela continue d’arriver.",[10,34,35,36,41],{},"Entre le 12 et le 14 août 2026, nous avons passé neuf contrôles externes sur\n30 998 applis en production construites avec Lovable, Bolt, v0, Replit et\nBase44. Trois d’entre elles livraient une clé secrète Stripe active, et deux\nautres une clé restreinte, ce qui en fait l’un des constats les plus rares du\nbalayage ; ces mêmes neuf contrôles ont trouvé une clé d’API Google dans 1 142\napplis. Les trois clés secrètes sont ressorties avec la note D, parce qu’un seul\nconstat critique plafonne la note à ce niveau quoi que l’appli ait fait de bien\npar ailleurs. Les chiffres complets sont dans\n",[37,38,40],"a",{"href":39},"\u002Fresearch\u002Fvibe-coded-app-security-2026","notre rapport de scan",".",[43,44,46],"h2",{"id":45},"une-clé-secrète-stripe-exposée-dans-votre-frontend-est-ce-un-problème","Une clé secrète Stripe exposée dans votre frontend, est-ce un problème ?",[10,48,49,50,52,53,41],{},"Oui, si la chaîne commence par ",[14,51,16],{},". Non, si elle commence par\n",[14,54,28],{},[10,56,57],{},"Stripe émet deux clés actives parce que les deux moitiés d’un paiement se\ndéroulent à deux endroits différents. Imaginez le comptoir d’un magasin. Le\nterminal de paiement fait face au client et il est vissé bien en vue, et le pire\nqu’un inconnu puisse en faire, c’est vous payer. La caisse derrière le comptoir\nest un tout autre objet. Elle s’ouvre, elle contient la recette du jour, et le\ntiroir en dessous contient une fiche par client avec son adresse écrite dessus.",[10,59,60,62],{},[14,61,28],{},", c’est le terminal de paiement. Son travail consiste à construire un\nformulaire de paiement dans le navigateur de quelqu’un d’autre, et la\ndocumentation de Stripe dit que les clés publiables peuvent sans risque être\nexposées dans le code frontend.",[10,64,65,67],{},[14,66,16],{},", c’est la clé de la caisse. Stripe décrit les clés secrètes comme\nayant des droits illimités sur toutes les API, ce qui est la même phrase lue de\nl’autre côté : il n’y a rien dans votre compte qu’elle n’atteigne pas.",[10,69,70],{},"Votre appli a besoin du terminal dans le navigateur ne serait-ce que pour\nencaisser. De la clé de la caisse, elle ne devrait jamais avoir besoin.",[43,72,74],{"id":73},"pk_live_-et-sk_live_-comment-les-distinguer","pk_live_ et sk_live_ : comment les distinguer",[10,76,77],{},"Lisez le deuxième caractère du préfixe. C’est tout le test.",[79,80,81,100],"table",{},[82,83,84],"thead",{},[85,86,87,91,94,97],"tr",{},[88,89,90],"th",{},"Clé",[88,92,93],{},"Commence par",[88,95,96],{},"Sans danger dans le navigateur ?",[88,98,99],{},"Ce qu’elle fait",[101,102,103,124,143,160],"tbody",{},[85,104,105,109,114,121],{},[106,107,108],"td",{},"Publiable",[106,110,111],{},[14,112,113],{},"pk_live_…",[106,115,116],{},[117,118,120],"key-verdict",{"type":119},"safe","À sa place",[106,122,123],{},"Construit le formulaire de paiement et tokenise une carte. Ne lit aucun client, ne déplace rien.",[85,125,126,129,134,140],{},[106,127,128],{},"Secrète",[106,130,131],{},[14,132,133],{},"sk_live_…",[106,135,136],{},[117,137,139],{"type":138},"danger","Jamais",[106,141,142],{},"Droits illimités sur toutes les API de Stripe, sur l’ensemble de votre compte.",[85,144,145,148,153,157],{},[106,146,147],{},"Restreinte",[106,149,150],{},[14,151,152],{},"rk_live_…",[106,154,155],{},[117,156,139],{"type":138},[106,158,159],{},"Seulement les droits cochés à sa création. Reste un identifiant valide entre des mains étrangères.",[85,161,162,165,174,179],{},[106,163,164],{},"De test",[106,166,167,170,171],{},[14,168,169],{},"sk_test_",", ",[14,172,173],{},"pk_test_",[106,175,176],{},[117,177,178],{"type":138},"Non",[106,180,181],{},"Ne touche que votre bac à sable. Un problème plus petit, avec la même habitude derrière.",[10,183,184,185,188,189,192],{},"Le milieu du préfixe est la deuxième chose à lire. ",[14,186,187],{},"_test_"," n’atteint rien\nau-delà de votre bac à sable, une clé de test fuitée ne vous coûte donc pas\nd’argent ; elle publie tout de même la façon dont votre intégration est\nconstruite, et la consigne de Stripe est de traiter comme compromise toute clé\nsecrète ou restreinte vue là où elle ne devait pas être. Les comptes plus\nrécents peuvent aussi porter une clé d’organisation commençant par ",[14,190,191],{},"sk_org_",",\nqui opère sur plusieurs comptes Stripe à la fois. Elle suit la même règle, et\nune fuite y porte plus loin qu’un seul compte.",[194,195,197],"callout",{"type":196},"warn",[10,198,199,202],{},[22,200,201],{},"Rien ne casse quand vous collez la mauvaise."," Un checkout construit avec la\nclé secrète fonctionne. Les paiements arrivent, le tableau de bord se remplit,\net l’appli se comporte exactement comme elle l’aurait fait avec la clé\npubliable, parce que la clé secrète a le droit de faire tout ce que fait la\npubliable, et bien davantage. Il n’y a aucune erreur à remarquer ni aucun\navertissement à fermer, et c’est pour cela que ce constat a d’ordinaire\nplusieurs mois quand quelqu’un finit par le lire sur un scan.",[43,204,206],{"id":205},"ce-que-quelquun-peut-faire-avec-une-clé-secrète-stripe-fuitée","Ce que quelqu’un peut faire avec une clé secrète Stripe fuitée",[10,208,209],{},"Tout ce que vous pouvez faire dans votre propre tableau de bord sans mot de\npasse.",[10,211,212],{},"Pas « obtenir un accès non autorisé ». Concrètement, avec rien de plus que la\nchaîne et un terminal : lire votre liste complète de clients, avec les noms, les\nadresses e-mail, les adresses de facturation et les quatre derniers chiffres de\nchaque carte. Lire tous les paiements que vous avez encaissés, et ce que chaque\nclient a payé. Émettre des remboursements. Créer des débits et des liens de\npaiement en votre nom. Résilier des abonnements.",[214,215],"diagram",{"alt":216,"caption":217,"src":218},"Une grille avec quatre rangées d’icônes à gauche : un terminal de paiement, trois personnes, deux pièces empilées et une pile de lignes de tableau. Deux colonnes portent les en-têtes pk_live_ et sk_live_. Dans la colonne pk_live_, la rangée du terminal porte une coche verte et les trois autres rangées des croix pâles. Dans la colonne sk_live_, les quatre rangées portent des coches rouges.","Les deux clés sont dans le même fichier. La seconde colonne est ce qu’achète le caractère supplémentaire, et chaque coche rouge y est une requête qui aboutit.","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fwhat-each-key-can-do-1600x820.png",[10,220,221,222,225],{},"Il y a ensuite l’usage qui n’a rien à voir avec vous. Votre compte devient un\nendroit où pratiquer le ",[22,223,224],{},"card testing",", le terme de Stripe lui-même pour un\nfraudeur qui fait passer des numéros de carte volés par l’intégration de\nn’importe qui afin de trouver ceux qui fonctionnent encore. Les cartes\nappartiennent à d’autres. Les refus, les litiges et les explications vous\nappartiennent.",[10,227,228],{},"Ce qu’ils ne peuvent généralement pas faire, c’est se payer eux-mêmes. Un\nremboursement retourne sur la carte qui a fait le paiement d’origine, et un\nvirement part vers le compte bancaire enregistré, qui est le vôtre. Cela a l’air\nd’une bonne nouvelle et n’en est pas une : le dommage arrive sous la forme de\nvotre argent qui part, des fiches de vos clients qui sont copiées et de votre\ncompte utilisé pour la fraude d’un autre, plutôt que sous la forme d’un virement\nque vous pourriez montrer du doigt et poursuivre.",[10,230,231],{},"Rien de tout cela n’exige un attaquant sophistiqué. La documentation de Stripe\ndit elle-même que des acteurs frauduleux balaient en continu les bases de code\npubliques à la recherche de clés exposées, et ces scanners n’ont pas besoin de\nsavoir qui vous êtes pour trouver la vôtre.",[43,233,235],{"id":234},"comment-renouveler-une-clé-secrète-stripe-sans-casser-les-paiements","Comment renouveler une clé secrète Stripe sans casser les paiements",[10,237,238],{},"Créez d’abord le remplacement, mettez-le en service, puis faites expirer\nl’ancienne. Dans cet ordre.",[240,241,242,249,255,261,267],"ol",{},[243,244,245,248],"li",{},[22,246,247],{},"Dans le tableau de bord Stripe, créez une nouvelle clé secrète."," Laissez l’ancienne tranquille pour l’instant ; les deux fonctionnent en même temps, et c’est ce recouvrement qui garde votre checkout en marche.",[243,250,251,254],{},[22,252,253],{},"Mettez la nouvelle clé là où vivait l’ancienne",", c’est-à-dire sur un serveur, dans une Edge Function ou dans une route serverless. Jamais dans l’appli que le navigateur télécharge.",[243,256,257,260],{},[22,258,259],{},"Déployez, puis encaissez un vrai paiement."," Un débit qui aboutit est la seule preuve que la nouvelle clé est correctement branchée.",[243,262,263,266],{},[22,264,265],{},"Faites expirer l’ancienne clé."," Stripe le décrit ainsi : faire expirer une clé secrète ou restreinte l’empêche de passer le moindre appel d’API supplémentaire.",[243,268,269,272],{},[22,270,271],{},"Lisez votre historique de paiements"," sur la période où la clé était exposée, et vos e-mails Stripe pour tout ce que vous n’avez pas fait.",[10,274,275],{},"Si la clé est déjà dehors et que vous préférez perdre quelques paiements plutôt\nque de la laisser active une heure de plus, faites l’inverse. Renouveler une clé\nla bloque immédiatement et en génère une nouvelle, et Stripe précise que les\nendpoints de webhook créés avec l’ancienne clé restent actifs, votre traitement\nd’événements survit donc à l’urgence.",[214,277],{"alt":278,"caption":279,"src":280},"Trois panneaux numérotés de gauche à droite. Sur le premier, une fenêtre d’appli est reliée à une seule pastille de clé. Sur le deuxième, une seconde pastille est apparue, l’appli est désormais reliée à celle-ci, et la première est dessinée en pâle sans aucun trait. Sur le troisième, la première pastille est barrée et partie, et l’appli n’est plus reliée qu’à la nouvelle.","Le recouvrement du panneau du milieu est tout l’enjeu. Les deux clés sont actives en même temps, et c’est ce qui permet l’échange sans trou dans votre checkout.","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Frolling-the-key-1600x620.png",[10,282,283],{},"Il reste une étape, et c’est celle que la plupart des gens font en premier :\nsupprimer la clé de votre code. Faites-le, en sachant ce que cela produit. Vos\nvisiteurs ont déjà téléchargé le fichier qui la portait, ce fichier est dans des\ncaches de navigateur que vous ne contrôlez pas, et l’ancienne valeur figure\ntoujours dans votre historique de versions. Faire expirer la clé chez Stripe est\nce qui ferme la porte. Retirer la ligne vous empêche de l’expédier à nouveau.",[10,285,286],{},"Les clés publiables, soit dit en passant, ne peuvent pas expirer du tout. Stripe\nn’a jamais construit ce contrôle, parce que cette clé n’a jamais été censée\nrester privée.",[43,288,290],{"id":289},"ce-quest-une-clé-restreinte-stripe-et-quand-elle-est-la-bonne-réponse","Ce qu’est une clé restreinte Stripe, et quand elle est la bonne réponse",[10,292,293],{},"Une clé taillée pour une tâche plutôt que pour toutes.",[10,295,296,297,300],{},"Une clé restreinte commence par ",[14,298,299],{},"rk_live_"," et ne porte que les droits que vous\ncochez à sa création. Une clé autorisée à lire des factures ne peut pas émettre\nde remboursement. Une clé autorisée à créer des débits ne peut pas lire votre\nliste de clients. Stripe recommande de passer des clés secrètes aux clés\nrestreintes exactement pour cette raison, et c’est un bon conseil au sujet du\ncode qui tourne sur votre serveur.",[10,302,303],{},"Ce n’est pas un moyen de rendre acceptable une clé dans le navigateur. Deux des\n30 998 applis de notre balayage livraient une clé restreinte dans le frontend,\net les deux sont ressorties avec la note C. Notre scan classe une clé restreinte\nen constat élevé là où une clé secrète est un constat critique, et un seul\nconstat élevé plafonne la note à C. Celui qui trouve cette clé obtient encore\nchacun des droits que vous avez cochés, depuis n’importe où.",[10,305,306],{},"Là où une clé restreinte gagne sa place, c’est dans le cas intermédiaire\ninconfortable, et les applis vibe-codées en produisent beaucoup. Un outil\nd’automatisation qui doit lire vos virements. Un script de reporting que\nquelqu’un vous a écrit sur Fiverr. Une Edge Function qui ne crée jamais qu’un\nseul type de débit. Chacun tourne sur un serveur et chacun a besoin d’une\nfraction de votre compte, chacun reçoit donc sa propre clé avec cette fraction\ncochée, et le jour où l’une fuite, vous révoquez une clé au lieu de recâbler\ntoute votre intégration.",[43,308,310],{"id":309},"comment-vérifier-ce-que-votre-appli-livre-réellement","Comment vérifier ce que votre appli livre réellement",[10,312,313,314,316,317,316,319,321],{},"Commencez à la main, cela ne coûte rien et ne demande aucune installation.\nOuvrez votre site en production, affichez le code source de la page et\ncherchez-y ",[14,315,16],{},", puis ",[14,318,299],{},[14,320,28],{},". Trouver la troisième et\npas les deux premières est le résultat que vous voulez.",[10,323,324,325,327,328,330],{},"Ce qu’une recherche dans le code source manque, c’est le JavaScript que la page\ncharge ensuite, et sur une appli construite avec Lovable, Bolt ou Replit, c’est\npresque tout. Notre scanner gratuit ouvre votre appli dans un vrai navigateur,\nattend l’arrivée des bundles et lit ceux-là. Il classe ce qu’il trouve au lieu\nde faire correspondre des chaînes en forme de clé, si bien que ",[14,326,28],{},"\nrevient marquée comme correcte et ",[14,329,16],{}," revient en constat critique, et les\ndeux ne se retrouvent jamais dans la même pile.",[214,332],{"alt":333,"caption":334,"src":335},"La marque Reeve au-dessus d’une grille de neuf icônes au trait, une par contrôle : une clé, un cylindre de base de données, un document, un cadenas, une boîte à couvercle, une paire de crochets de code, un globe, une rosette de certificat et un calendrier.","Les clés sont l’un des neuf contrôles en lecture seule. Les autres sont la raison pour laquelle une note vous en dit plus qu’une recherche dans votre propre code source.","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fnine-checks-1600x420.png",[10,337,338],{},"La note, le score et les décomptes s’affichent à l’écran en une vingtaine de\nsecondes, sans compte. Donnez une adresse e-mail et la liste détaillée arrive\navec, accompagnée d’un correctif écrit pour le builder que vous avez utilisé et\nque vous pouvez coller tel quel.",[10,340,341,342,345,346,350,351,41],{},"Trois choses que le scan ne fera pas, et ce sont les raisons pour lesquelles on\npeut le pointer sans crainte sur une appli en production qui encaisse vraiment :\nil ne se connecte jamais, il n’écrit jamais rien, et il ne conserve jamais une\nclé qu’il trouve. Un secret exposé est stocké sous forme d’indice masqué de la\nforme ",[14,343,344],{},"sk_live_…a1b2",", et la vraie valeur est jetée.\n",[37,347,349],{"href":348},"\u002F#scan","Scannez votre appli",", ou lisez d’abord\n",[37,352,354],{"href":353},"\u002Fsecurity-scanner","ce que regarde chacun des neuf contrôles",[43,356,358],{"id":357},"que-faire-maintenant","Que faire maintenant",[360,361,362],"key-takeaways",{},[363,364,365,377,380,383,386,389],"ul",{},[243,366,367,368,370,371,373,374,376],{},"Lisez le deuxième caractère avant toute chose. ",[14,369,28],{}," dans votre bundle est correct et ne demande rien ; ",[14,372,16],{}," et ",[14,375,299],{}," demandent quelque chose.",[243,378,379],{},"Créez d’abord la clé de remplacement et confirmez un vrai paiement avec elle, puis faites expirer l’ancienne chez Stripe. C’est l’expiration qui ferme la porte.",[243,381,382],{},"Supprimer la clé de votre code ne ferme rien en soi. Le fichier qui la portait est déjà téléchargé, mis en cache et présent dans votre historique de versions.",[243,384,385],{},"Déplacez sur un serveur tout ce qui avait besoin de cette clé : une Edge Function, une route serverless, n’importe quoi qui ne soit pas le navigateur.",[243,387,388],{},"Lisez votre historique de paiements et votre liste de clients sur la période où la clé était active. Le renouvellement arrête ce qui se passera ensuite et ne dit rien de ce qui s’est déjà passé.",[243,390,391],{},"Donnez à chaque tâche côté serveur sa propre clé restreinte avec les seuls droits dont elle a besoin, pour que la prochaine fuite vous coûte une clé et non toutes.",[10,393,394],{},"Une clé Stripe arrive en général tard. L’appli sort, elle tourne un moment, et\npuis un jour vous ajoutez le checkout, et c’est ce déploiement-là qui met pour\nla première fois un identifiant de paiement dans le bundle. Le scan que vous\navez lancé au lancement était la photographie d’une appli qui ne pouvait pas\nencore encaisser.",[10,396,397,401],{},[37,398,400],{"href":399},"\u002Fpricing","Reeve Monitor"," est fait pour cet écart. Il repasse les neuf contrôles\ntoutes les heures sur trois applis au plus, surveille la disponibilité toutes\nles 60 secondes, vous prévient le jour où un résultat change au lieu d’attendre\nque vous regardiez, et envoie un rapport mensuel en langage clair. Une clé qui\natteint le bundle avec un déploiement du jeudi se retrouve dans le scan de\nl’heure qui suit. C’est €12 par mois au tarif public, avec sept jours gratuits\navant tout prélèvement, et la page de tarifs est parfois en dessous du chiffre\nindiqué ici, jamais au-dessus.",[10,403,404,405,409,410,414,415,419,420,41],{},"Si vous préférez avancer par liste, la\n",[37,406,408],{"href":407},"\u002Fchecklist","checklist de sécurité en 10 minutes"," couvre ce point ainsi que les\nautres choses à refermer dans une appli fraîchement lancée. Pour la question\nplus large de savoir quelles clés ont leur place dans un navigateur, nous avons\n",[37,411,413],{"href":412},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","un guide pour distinguer les clés publiables des clés secrètes",",\n",[37,416,418],{"href":417},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","la même question pour une clé OpenAI",",\net ",[37,421,423],{"href":422},"\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps","un recensement de ce que 30 998 applis livraient vraiment",{"title":425,"searchDepth":426,"depth":426,"links":427},"",3,[428,430,431,432,433,434,435],{"id":45,"depth":429,"text":46},2,{"id":73,"depth":429,"text":74},{"id":205,"depth":429,"text":206},{"id":234,"depth":429,"text":235},{"id":289,"depth":429,"text":290},{"id":309,"depth":429,"text":310},{"id":357,"depth":429,"text":358},"Bases de la sécurité","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcover-1200x630.png","Une caisse enregistreuse de magasin, tiroir-caisse grand ouvert, avec une clé oubliée dans la serrure sur la face avant de la machine.","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.",false,"md",[443,446,449,452,455,458],{"q":444,"a":445},"Ma clé publiable Stripe est-elle sans danger dans le frontend ?","Oui. Une clé qui commence par pk_live_ a sa place dans la page, et Stripe le dit dans sa propre documentation : les clés publiables peuvent sans risque être exposées dans le code frontend. Elle construit le formulaire de paiement et tokenise une carte. Elle ne peut ni lire vos clients, ni déplacer d’argent, ni rembourser quoi que ce soit. Si un scanner ou une connaissance vous a dit qu’une clé Stripe était exposée, lisez le deuxième caractère avant toute autre chose, car une clé pk_live_ posée dans votre bundle, c’est votre intégration qui fonctionne exactement comme Stripe l’a conçue.",{"q":447,"a":448},"Que peut faire quelqu’un avec une clé secrète Stripe fuitée ?","Tout ce que vous pouvez faire dans votre propre tableau de bord sans mot de passe. Lire votre liste complète de clients avec les noms, les adresses e-mail, les adresses de facturation et les quatre derniers chiffres de chaque carte, lire tous les paiements que vous avez encaissés, émettre des remboursements jusqu’à vider votre solde, créer des débits et des liens de paiement, et faire passer des numéros de carte volés par votre compte pour trouver ceux qui fonctionnent encore. Ce dernier point, Stripe l’appelle card testing, et il vous arrive sous forme de litiges et de refus sur un compte que vous croyiez tranquille.",{"q":450,"a":451},"Comment renouveler une clé Stripe sans interrompre les paiements ?","Créez d’abord le remplacement. Dans le tableau de bord Stripe, créez une nouvelle clé secrète, mettez-la là où vivait l’ancienne sur votre serveur, déployez, et confirmez un vrai paiement avec la nouvelle clé. Ensuite seulement, faites expirer l’ancienne, ce qui l’empêche de passer le moindre appel d’API supplémentaire. Si la clé est déjà publique et que vous préférez perdre quelques paiements plutôt que de la laisser active, renouvelez-la sur-le-champ : le renouvellement bloque la clé immédiatement et en génère une nouvelle, et Stripe précise que les endpoints de webhook créés avec l’ancienne clé restent actifs.",{"q":453,"a":454},"Qu’est-ce qu’une clé restreinte Stripe ?","Une clé taillée pour une seule tâche. Une clé restreinte commence par rk_live_ et ne porte que les droits que vous cochez à sa création, si bien qu’une clé autorisée à lire des factures ne peut pas émettre de remboursement. Stripe recommande de passer des clés secrètes aux clés restreintes précisément pour cette raison. Lisez cela comme un conseil sur le code de votre serveur, pas comme un moyen de rendre acceptable une clé côté navigateur : une clé restreinte dans votre bundle reste un identifiant qu’un inconnu peut utiliser, et notre scan la classe en constat élevé.",{"q":456,"a":457},"Stripe me prévient-il si ma clé fuite ?","Parfois, et vous ne pouvez pas compter dessus. Stripe indique qu’il balaie activement internet à la recherche de clés d’API fuitées, avec des outils comme le scanner de jetons de GitHub, et qu’il peut vous avertir ou désactiver une clé qu’il trouve. Sa propre page de bonnes pratiques ajoute que la détection n’est pas garantie. Ce balayage fonctionne surtout sur les dépôts de code publics, et une clé compilée dans le JavaScript de votre propre domaine n’est pas un dépôt. Traitez comme compromise toute clé que vous avez vue là où elle n’aurait pas dû être, que Stripe ait dit quelque chose ou non.",{"q":459,"a":460},"Une clé de test (sk_test_) est-elle dangereuse dans mon frontend ?","C’est un problème bien plus petit qu’une clé active, et il mérite quand même d’être fermé. Une clé de test ne touche que votre bac à sable, personne ne peut donc prendre votre argent avec. Ce qu’elle livre, en revanche, c’est une carte fonctionnelle de la façon dont votre intégration est montée, et elle signale en général que la même habitude de copier-coller n’est plus qu’à un déploiement d’envoyer la clé active. Stripe traite comme compromise toute clé secrète ou restreinte aperçue là où elle ne devait pas être. Faites-la expirer et déplacez l’appel sur un serveur.","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcard-800x500.png",[463,464,465,466,467,468,469],"clé secrète stripe exposée","clé sk_live dans le frontend","clé stripe fuitée que faire","clé restreinte stripe","ma clé publiable stripe est-elle sûre","renouveler une clé api stripe","clé stripe dans le bundle javascript",{},true,"Clé secrète Stripe exposée dans votre frontend ?","\u002Fblog\u002Fstripe-secret-key-in-frontend","2026-09-19",{"title":5,"description":439},"blog\u002Fstripe-secret-key-in-frontend",[478,479,480,481],"Une clé secrète Stripe exposée dans votre frontend est la fuite qui se facture à votre compte : remboursements, nouveaux débits et chaque fiche client que vous détenez.","pk_live_ a sa place dans votre appli et l’a toujours eue. sk_live_ n’en diffère que par un caractère et dispose de droits illimités sur tout votre compte Stripe.","Créez d’abord la clé de remplacement, mettez-la en service, puis faites expirer l’ancienne. Supprimer la ligne de votre code ne rappelle rien de ce qui a déjà été téléchargé.","Nous avons trouvé une clé secrète Stripe active dans 3 des 30 998 applis scannées. Les trois sont ressorties avec la note D.","fKsjAFF3FN0RZfUZF5egIMtrM-ycB7DG5DdAUhx2D5g",[484,491,497,503,509,510,516,522,528,534,540,546,552,558,564,570,576,582,588,594,600,605,610,616,622,628,634,640,646,652,658,664,670,676,682,688,693,699,705,711,716,722],{"path":485,"title":486,"description":487,"published":488,"category":489,"image":490,"draft":440},"\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","Backups","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":492,"title":493,"description":494,"published":495,"category":436,"image":496,"draft":440},"\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":498,"title":499,"description":500,"published":501,"category":436,"image":502,"draft":440},"\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":504,"title":505,"description":506,"published":507,"category":436,"image":508,"draft":440},"\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":473,"title":5,"description":439,"published":474,"category":436,"image":461,"draft":440},{"path":511,"title":512,"description":513,"published":514,"category":436,"image":515,"draft":440},"\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":517,"title":518,"description":519,"published":520,"category":436,"image":521,"draft":440},"\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":523,"title":524,"description":525,"published":526,"category":436,"image":527,"draft":440},"\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":529,"title":530,"description":531,"published":532,"category":436,"image":533,"draft":440},"\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":535,"title":536,"description":537,"published":538,"category":489,"image":539,"draft":440},"\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":541,"title":542,"description":543,"published":544,"category":489,"image":545,"draft":440},"\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":547,"title":548,"description":549,"published":550,"category":489,"image":551,"draft":440},"\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":553,"title":554,"description":555,"published":556,"category":436,"image":557,"draft":440},"\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":559,"title":560,"description":561,"published":562,"category":436,"image":563,"draft":440},"\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":565,"title":566,"description":567,"published":568,"category":436,"image":569,"draft":440},"\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":571,"title":572,"description":573,"published":574,"category":436,"image":575,"draft":440},"\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":577,"title":578,"description":579,"published":580,"category":436,"image":581,"draft":440},"\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":583,"title":584,"description":585,"published":586,"category":436,"image":587,"draft":440},"\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":589,"title":590,"description":591,"published":592,"category":436,"image":593,"draft":440},"\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":595,"title":596,"description":597,"published":598,"category":436,"image":599,"draft":440},"\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":417,"title":601,"description":602,"published":603,"category":436,"image":604,"draft":440},"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":422,"title":606,"description":607,"published":608,"category":436,"image":609,"draft":440},"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":611,"title":612,"description":613,"published":614,"category":489,"image":615,"draft":440},"\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":617,"title":618,"description":619,"published":620,"category":436,"image":621,"draft":440},"\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":623,"title":624,"description":625,"published":626,"category":489,"image":627,"draft":440},"\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":629,"title":630,"description":631,"published":632,"category":436,"image":633,"draft":440},"\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":635,"title":636,"description":637,"published":638,"category":436,"image":639,"draft":440},"\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":641,"title":642,"description":643,"published":644,"category":436,"image":645,"draft":440},"\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":647,"title":648,"description":649,"published":650,"category":436,"image":651,"draft":440},"\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":653,"title":654,"description":655,"published":656,"category":489,"image":657,"draft":440},"\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":659,"title":660,"description":661,"published":662,"category":489,"image":663,"draft":440},"\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":665,"title":666,"description":667,"published":668,"category":436,"image":669,"draft":440},"\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":671,"title":672,"description":673,"published":674,"category":436,"image":675,"draft":440},"\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":677,"title":678,"description":679,"published":680,"category":489,"image":681,"draft":440},"\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":683,"title":684,"description":685,"published":686,"category":436,"image":687,"draft":440},"\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":689,"title":690,"description":691,"published":686,"category":436,"image":692,"draft":440},"\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":694,"title":695,"description":696,"published":697,"category":436,"image":698,"draft":440},"\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":700,"title":701,"description":702,"published":703,"category":489,"image":704,"draft":440},"\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":706,"title":707,"description":708,"published":709,"category":436,"image":710,"draft":440},"\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":712,"title":713,"description":714,"published":709,"category":489,"image":715,"draft":440},"\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":717,"title":718,"description":719,"published":720,"category":489,"image":721,"draft":440},"\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":412,"title":723,"description":724,"published":720,"category":436,"image":725,"draft":440},"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",1790150953862]