[{"data":1,"prerenderedAt":663},["ShallowReactive",2],{"blog-fr-missing-security-headers":3,"blog-index-fr":418},{"id":4,"title":5,"body":6,"category":374,"cover":375,"coverAlt":376,"description":377,"draft":378,"extension":379,"faq":380,"image":396,"keywords":397,"meta":405,"navigation":406,"ogTitle":407,"path":408,"published":409,"seo":410,"stem":411,"tldr":412,"updated":409,"__hash__":417},"blog_fr\u002Fblog\u002Fmissing-security-headers.md","En-têtes de sécurité manquants : quand cela compte",{"type":7,"value":8,"toc":362},"minimark",[9,13,21,30,35,38,41,44,47,51,54,57,63,70,73,76,83,87,90,179,192,196,199,202,207,210,215,227,231,234,237,252,261,265,268,283,293,296,308,312,349],[10,11,12],"p",{},"Votre scan revient et presque toutes les lignes sont vertes. Une est ambre :\ncertains en-têtes de sécurité du navigateur sont manquants. C’est la seule chose\ncolorée de la page, donc cela ressemble à ce qu’il faut traiter en premier.",[10,14,15,16,20],{},"Voici la partie que la plupart des conseils sur le sujet ratent. ",[17,18,19],"strong",{},"Les en-têtes\nde sécurité manquants sont le constat que nous affichons le plus souvent et, à\neux seuls, ils ne vous disent presque rien sur la possibilité pour quelqu’un\nd’atteindre vos données."," Le traiter comme une intrusion revient soit à le\ncorriger dans la panique avant ce qui décide vraiment qui lit votre base de\ndonnées, soit à apprendre que les lignes ambre sont du bruit, ce qui est pire.",[10,22,23,24,29],{},"Entre le 12 et le 14 août 2026, nous avons passé les mêmes neuf vérifications\nexternes sur 30 998 applications en ligne construites avec Lovable, Bolt, v0,\nReplit et Base44. Parmi les applications dont cette vérification a obtenu une\nréponse, il manquait au moins un en-tête à 30 756 sur 30 981. Les chiffres\ncomplets sont dans\n",[25,26,28],"a",{"href":27},"\u002Fresearch\u002Fvibe-coded-app-security-2026","notre rapport de scan",".",[31,32,34],"h2",{"id":33},"les-en-têtes-de-sécurité-manquants-sont-ils-un-problème","Les en-têtes de sécurité manquants sont-ils un problème ?",[10,36,37],{},"C’est un vrai trou et c’est presque toujours la ligne la moins urgente de votre\nrapport.",[10,39,40],{},"Un en-tête de sécurité est une courte instruction que votre serveur attache à\nchaque page qu’il envoie, adressée au navigateur du visiteur plutôt qu’au\nvisiteur. Ne laisse pas un autre site mettre cette page dans un cadre. Ne devine\npas de quel type de fichier il s’agit. Ne transmets pas mon adresse complète\nquand quelqu’un clique vers l’extérieur. Ce sont des notes à un assistant qui\nfait ce que n’importe quel site lui dit.",[10,42,43],{},"Le reste de votre rapport parle de serrures. Row Level Security est-il activé, y\na-t-il une clé secrète dans votre code, un bucket de stockage liste-t-il son\ncontenu : voilà ce qui décide qui peut atteindre vos données. On veut les notes\net les serrures, et la note que vous n’avez jamais écrite n’est pas la raison\npour laquelle on perd une base de données.",[10,45,46],{},"Notre notation en tient compte. Un en-tête manquant retire cinq points sur cent\net ne plafonne rien, donc une application dont c’est le seul constat ressort à\n95 et avec la note A.",[31,48,50],{"id":49},"ce-que-nous-avons-trouvé-sur-30-998-applications","Ce que nous avons trouvé sur 30 998 applications",[10,52,53],{},"Les en-têtes manquants sont apparus presque partout, et ils ont à peine bougé\navec le reste du rapport.",[10,55,56],{},"25 821 de ces applications ont obtenu une réponse des neuf vérifications, et\nc’est le groupe où « rien d’autre n’allait mal » veut dire quelque chose. Parmi\nelles, il manquait au moins un en-tête à 25 606, et 215 avaient les cinq.",[58,59],"diagram",{"alt":60,"caption":61,"src":62},"Une grille de quatre nombres. Les lignes représentent le constat sur les en-têtes, dessiné comme une barre pleine s’il est présent et une barre vide en pointillés s’il manque. Les colonnes représentent le reste du rapport, une coche pour rien trouvé et une croix pour quelque chose trouvé. Ligne du haut : 70 et 145. Ligne du bas : 17 043 et 8 563.","Les applications à qui il manquait des en-têtes n’avaient pas plus souvent autre chose qui clochait que celles qui avaient les cinq.","\u002Fblog\u002Fmissing-security-headers\u002Fdoes-it-predict-anything-1600x900.png",[10,64,65,66,69],{},"Sur les 25 606 applications à qui il manquait au moins un en-tête, ",[17,67,68],{},"17 043\nn’avaient rien d’autre",". Deux sur trois. C’était le seul problème de leur\nrapport.",[10,71,72],{},"Lisez maintenant l’autre ligne, et c’est la partie qui nous a surpris. Sur les\n215 applications qui avaient les cinq en-têtes posés, 145 avaient autre chose\nqui clochait. C’est un taux de vrais problèmes plus élevé que chez les\napplications à en-têtes manquants, et non plus faible.",[10,74,75],{},"Nous n’avons pas mesuré pourquoi, et la lecture honnête est étroite : quoi que\nces scans aient trouvé d’autre, le constat sur les en-têtes ne l’a pas prédit.\nUne application avec un jeu parfait d’en-têtes n’était pas une application plus\nsûre dans nos données. L’explication la plus probable est que poser des en-têtes\nsuppose que quelqu’un a configuré un vrai hébergement, ce qui suppose en général\nune application plus grosse avec plus de choses à rater, mais c’est une\nsupposition et nous ne l’avons pas testée.",[10,77,78,79,29],{},"Si vous voulez voir quelles lignes votre propre application produit, le scan est\ngratuit, prend une vingtaine de secondes et ne demande aucun compte :\n",[25,80,82],{"href":81},"\u002Fsecurity-scanner","scanner votre application",[31,84,86],{"id":85},"ce-que-fait-vraiment-chaque-en-tête","Ce que fait vraiment chaque en-tête",[10,88,89],{},"Chacun éteint un comportement du navigateur qui est actif par défaut.",[91,92,93,109],"table",{},[94,95,96],"thead",{},[97,98,99,103,106],"tr",{},[100,101,102],"th",{},"En-tête",[100,104,105],{},"Ce qu’il dit au navigateur",[100,107,108],{},"Ce que son absence permet",[110,111,112,127,140,153,166],"tbody",{},[97,113,114,121,124],{},[115,116,117],"td",{},[118,119,120],"code",{},"Content-Security-Policy",[115,122,123],{},"Depuis quels endroits cette page peut charger du code et des styles",[115,125,126],{},"Un script injecté peut envoyer des données n’importe où",[97,128,129,134,137],{},[115,130,131],{},[118,132,133],{},"Strict-Transport-Security",[115,135,136],{},"Reviens toujours en HTTPS, jamais en HTTP simple",[115,138,139],{},"Une visite sur un réseau non fiable peut être rabaissée en HTTP simple",[97,141,142,147,150],{},[115,143,144],{},[118,145,146],{},"X-Frame-Options",[115,148,149],{},"Ne laisse pas un autre site afficher cette page dans un cadre",[115,151,152],{},"Votre page peut être chargée de façon invisible dans celle de quelqu’un d’autre",[97,154,155,160,163],{},[115,156,157],{},[118,158,159],{},"X-Content-Type-Options",[115,161,162],{},"Fie-toi au type de fichier que je t’ai donné et ne le devine pas au contenu",[115,164,165],{},"Un fichier déposé par quelqu’un peut être servi comme un tout autre type",[97,167,168,173,176],{},[115,169,170],{},[118,171,172],{},"Referrer-Policy",[115,174,175],{},"Quelle part de cette adresse transmettre quand un visiteur clique vers ailleurs",[115,177,178],{},"Des URL complètes, avec tout ce qu’elles contiennent, atteignent des serveurs tiers",[10,180,181,182,184,185,188,189,191],{},"Deux d’entre eux se recoupent, et le scanner en tient compte. Une\n",[118,183,120],{}," contenant ",[118,186,187],{},"frame-ancestors"," fait le même travail que\n",[118,190,146],{},", donc notre vérification compte l’un ou l’autre et n’exige pas\nles deux.",[31,193,195],{"id":194},"quand-un-en-tête-manquant-est-tout-le-problème","Quand un en-tête manquant est tout le problème",[10,197,198],{},"Quand votre application a quelque chose qui vaut la peine d’être cliqué pendant\nqu’on y est connecté.",[10,200,201],{},"C’est le cas du clickjacking, et c’est le seul qui fonctionne sans aucune autre\nerreur. Quelqu’un charge votre application dans un cadre invisible sur une page\nqu’il contrôle et pose ses propres boutons par-dessus les vôtres, si bien qu’un\nvisiteur déjà connecté clique sur ce qui ressemble à sa page et touche l’une de\nvos commandes : le bouton qui supprime un compte, valide un virement ou change\nune adresse e-mail.",[58,203],{"alt":204,"caption":205,"src":206},"Deux rangées. Dans la première, une page se déplace vers la droite et une barre l’arrête avant qu’elle n’atteigne un panneau vide en pointillés. Dans la seconde il n’y a pas de barre, et la page est dessinée en petit à l’intérieur de l’autre panneau, avec un pointeur de souris au-dessus de son bouton.","Avec l’en-tête, le navigateur refuse de dessiner votre page dans un autre site. Sans lui, c’est une chose parfaitement prévue.","\u002Fblog\u002Fmissing-security-headers\u002Floaded-inside-another-page-1600x790.png",[10,208,209],{},"Le visiteur est connecté, donc l’action porte sa session. Rien dans votre base\nde données n’a besoin d’être mal configuré. Ce qui rend la chose possible, c’est\nqu’on n’a jamais dit au navigateur de refuser.",[10,211,212,214],{},[118,213,172],{}," a une version plus petite de la même forme. Si une page à vous\nen session connectée porte quelque chose d’identifiant dans l’URL et pointe vers\nun hébergeur d’images ou un script d’analytics, l’adresse entière voyage avec le\nclic. Celui qui tient cet autre serveur voit où était votre utilisateur.",[10,216,217,218,220,221,223,224,226],{},"Les trois autres sont conditionnels. Ils comptent quand quelque chose a déjà mal\ntourné, et leur travail est de garder ça petit. Une ",[118,219,120],{},"\nlimite ce qu’un script injecté peut faire de son accès. ",[118,222,159],{},"\ncompte si des inconnus peuvent vous déposer des fichiers.\n",[118,225,133],{}," couvre celui qui utilise votre application sur un\nréseau qu’il ne contrôle pas.",[31,228,230],{"id":229},"ai-je-besoin-den-têtes-de-sécurité","Ai-je besoin d’en-têtes de sécurité ?",[10,232,233],{},"Oui. Ils coûtent peu, et ils viennent après les constats qui décident qui peut\nlire votre base de données.",[10,235,236],{},"L’ordre qui découle de la mesure ci-dessus : d’abord tout ce qui est critique ou\nélevé dans votre rapport, les en-têtes ensuite. Si votre rapport ne porte que\ncette ligne, comme c’était le cas pour 17 043 des applications scannées, alors\nles en-têtes sont en tête de votre liste par défaut.",[10,238,239,240,243,244,247,248,251],{},"Deux des cinq ne coûtent rien à poser correctement.\n",[118,241,242],{},"X-Content-Type-Options: nosniff"," et\n",[118,245,246],{},"Referrer-Policy: strict-origin-when-cross-origin"," tiennent chacun sur une\nligne, n’ont pas de mauvaise valeur à choisir et ne peuvent pas casser une\napplication qui marche. ",[118,249,250],{},"X-Frame-Options: DENY"," tient aussi sur une ligne, et\nmérite un coup d’œil d’abord si vous intégrez volontairement votre propre\napplication quelque part.",[10,253,254,256,257,260],{},[118,255,120],{}," est celui qui demande du vrai travail. Une première\ntentative bloque en général quelque chose dont votre propre page avait besoin,\net le symptôme est une fonction qui cesse de marcher sans rien dire. Livrez-le\nen ",[118,258,259],{},"Content-Security-Policy-Report-Only",", qui vous dit ce qu’il aurait bloqué\nsans rien bloquer, et lisez une semaine de rapports avant de l’activer.",[31,262,264],{"id":263},"comment-les-ajouter","Comment les ajouter",[10,266,267],{},"Dans ce qui sert réellement votre application à internet, et ce n’est souvent\npas là où vous la construisez.",[10,269,270,271,274,275,278,279,282],{},"La plupart des builders déploient vers un hébergeur qui est propriétaire de la\nréponse, donc le réglage vit là-bas. Sur Vercel, c’est ",[118,272,273],{},"headers"," dans\n",[118,276,277],{},"vercel.json",". Sur Netlify et Cloudflare Pages, c’est un fichier ",[118,280,281],{},"_headers"," à la\nracine de ce que vous publiez. Derrière le proxy de Cloudflare, c’est une\nTransform Rule. Si vous tenez votre propre serveur, c’est votre configuration\nnginx ou Caddy.",[284,285,287],"callout",{"type":286},"warn",[10,288,289,292],{},[17,290,291],{},"Si votre application est sur le sous-domaine du builder, vous ne pourrez\npeut-être pas les poser du tout."," C’est la plateforme qui envoie la réponse,\nles en-têtes sont son choix, et il n’existe aucun fichier que vous puissiez\najouter pour passer outre. C’est une vraie réponse et pas un manque de\nrecherche. Connecter un domaine à vous est ce qui vous donne un hébergement à\nconfigurer et, tant que vous n’en voulez pas, ce constat peut tranquillement\nrester dans votre rapport.",[10,294,295],{},"Ce qu’il faut savoir des en-têtes une fois posés, c’est qu’ils disparaissent\nsans que personne y touche. Passer à un domaine à vous, mettre un proxy devant,\nchanger d’hébergeur, modifier une configuration de framework : les en-têtes que\nvous avez ajoutés vivent à l’un de ces endroits, et chacun de ces mouvements\npeut les laisser en arrière. Rien ne vous prévient. La page continue de marcher,\net le réglage n’est plus là.",[10,297,298,299,303,304,29],{},"C’est pour ce genre de chose qu’existe ",[25,300,302],{"href":301},"\u002F#pricing","Reeve Monitor",". Il repasse la\nvérification complète toutes les heures sur trois applications au plus,\nsurveille la disponibilité toutes les 60 secondes et vous prévient quand un\nrésultat change, au lieu d’attendre que vous regardiez. Monitor surveille et\nrien de plus, donc si vous voulez en plus une copie de votre base de données\nquelque part où votre builder ne peut pas l’atteindre,\n",[25,305,307],{"href":306},"\u002Fsupabase-backups","c’est Care, et cela couvre Supabase",[31,309,311],{"id":310},"quoi-faire-maintenant","Quoi faire maintenant",[313,314,315],"key-takeaways",{},[316,317,318,322,331,337,343,346],"ul",{},[319,320,321],"li",{},"Lisez d’abord le reste de votre rapport. Si quelque chose y est marqué critique ou élevé, c’est là qu’est le travail, et les en-têtes attendent.",[319,323,324,325,327,328,330],{},"Posez aujourd’hui ",[118,326,242],{}," et ",[118,329,246],{},". Une ligne chacun, rien à décider, rien à casser.",[319,332,333,334,336],{},"Posez ",[118,335,250],{}," si des gens se connectent à votre application et peuvent y faire quelque chose de lourd en un clic.",[319,338,339,340,342],{},"Gardez ",[118,341,120],{}," pour la fin et démarrez-le en mode report-only, pour découvrir ce qu’il casse avant vos visiteurs.",[319,344,345],{},"Si vous êtes sur un sous-domaine de builder sans réglage d’en-têtes, laissez ce constat tranquille. Il n’est pas encore à vous.",[319,347,348],{},"Vérifiez-les à nouveau après un changement de domaine, l’ajout d’un proxy ou un changement d’hébergeur. C’est là qu’ils disparaissent.",[10,350,351,352,356,357,361],{},"Les en-têtes valent un après-midi tranquille une fois le reste du rapport\npropre. Si vous préférez parcourir toute la liste dans l’ordre, la\n",[25,353,355],{"href":354},"\u002Fchecklist","checklist de sécurité en 10 minutes"," couvre ce qu’il faut éteindre\ndans une application fraîchement lancée, et\n",[25,358,360],{"href":359},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","les constats qui décident vraiment qui lit votre base de données","\nsont les premiers à évacuer.",{"title":363,"searchDepth":364,"depth":364,"links":365},"",3,[366,368,369,370,371,372,373],{"id":33,"depth":367,"text":34},2,{"id":49,"depth":367,"text":50},{"id":85,"depth":367,"text":86},{"id":194,"depth":367,"text":195},{"id":229,"depth":367,"text":230},{"id":263,"depth":367,"text":264},{"id":310,"depth":367,"text":311},"Bases de la sécurité","\u002Fblog\u002Fmissing-security-headers\u002Fcover-1200x630.png","La liste des en-têtes qu'un site renvoie avec chaque page, quatre de ses lignes réglées et vides là où une valeur devrait figurer.","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.",false,"md",[381,384,387,390,393],{"q":382,"a":383},"Mon scan dit que des en-têtes de sécurité sont manquants. Mon application a-t-elle été piratée ?","Non. Un en-tête manquant est un réglage qui n'a jamais été activé, et ce n'est pas la preuve que quelque chose s'est produit. Le constat n'implique personne qui aurait atteint vos données ou votre compte. Il décrit une instruction que votre site pourrait donner aux navigateurs qui le visitent et qu'il ne donne pas aujourd'hui.",{"q":385,"a":386},"Quel en-tête de sécurité poser en premier ?","X-Content-Type-Options et Referrer-Policy, parce que chacun tient sur une ligne, qu'aucun n'a de mauvaise valeur à choisir et qu'aucun ne peut casser une application qui fonctionne. Ensuite X-Frame-Options, si des gens se connectent à votre application. Ensuite Strict-Transport-Security. Content-Security-Policy en dernier, parce que c'est le seul des cinq qui demande une vraie réflexion et le seul qui peut empêcher vos propres scripts de tourner.",{"q":388,"a":389},"Je suis sur le domaine par défaut de mon builder et il n’y a aucun réglage pour les en-têtes. Et maintenant ?","Laissez-les. Quand votre application est servie depuis un sous-domaine de la plateforme, les en-têtes de réponse sont le choix de la plateforme et pas le vôtre, et il n'existe aucun fichier que vous puissiez ajouter pour les changer. Connectez un domaine à vous si vous voulez la main dessus, parce que c'est le domaine qui vous permet de mettre votre propre hébergement ou un proxy devant l'application. En attendant, mettez l'effort sur les constats qu'il vous revient de corriger.",{"q":391,"a":392},"Une Content-Security-Policy peut-elle casser mon application ?","Oui, et c'est le résultat normal d'une première tentative. Une politique qui n'autorise pas les scripts en ligne arrêtera les scripts en ligne, y compris ceux générés par votre builder, et la page reste blanche ou perd une fonction, avec une erreur visible seulement dans la console du navigateur. Commencez par Content-Security-Policy-Report-Only, qui signale ce qu'elle aurait bloqué sans rien bloquer, et lisez les rapports pendant une semaine avant de l'activer pour de bon.",{"q":394,"a":395},"Les en-têtes de sécurité aident-ils si ma base de données est lisible par n’importe qui ?","Non. Les en-têtes sont des instructions aux navigateurs qui visitent votre site, et celui qui lit votre base de données directement n'utilise pas de navigateur et ne visite pas votre site. Cette requête part droit vers votre fournisseur de base de données et ne touche jamais vos pages, donc aucun en-tête posé dessus ne s'y applique. C'est Row Level Security qui décide de celle-là.","\u002Fblog\u002Fmissing-security-headers\u002Fcard-800x500.png",[398,399,400,401,402,403,404],"en-têtes de sécurité manquants","content-security-policy manquant","x-frame-options manquant","ai-je besoin d’en-têtes de sécurité","vérifier les en-têtes de sécurité","strict-transport-security manquant","en-têtes de sécurité manquants problème",{},true,"En-têtes de sécurité manquants : quand ça compte ?","\u002Fblog\u002Fmissing-security-headers","2026-09-04",{"title":5,"description":377},"blog\u002Fmissing-security-headers",[413,414,415,416],"Les en-têtes de sécurité manquants sont le constat le plus courant qui soit et, à eux seuls, ils ne disent presque rien sur la possibilité d'atteindre vos données.","Nous avons scanné 30 998 applications en ligne. Deux sur trois de celles à qui il manquait des en-têtes n’avaient rien d’autre.","Cela vaut quand même la peine de les corriger, après ce qui décide qui peut lire votre base de données.","Sur certains domaines de builders, vous ne pouvez pas les poser vous-même, et les laisser est une réponse raisonnable.","xnSDo9947P2aT7G7xfe5c7ZLEd127fFOhXuVX45bMoE",[419,426,432,438,444,450,456,462,468,474,480,486,492,498,504,510,516,522,528,534,535,541,547,553,559,565,571,577,583,589,595,601,607,613,619,624,629,635,641,647,652,658],{"path":420,"title":421,"description":422,"published":423,"category":424,"image":425,"draft":378},"\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":427,"title":428,"description":429,"published":430,"category":374,"image":431,"draft":378},"\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":433,"title":434,"description":435,"published":436,"category":374,"image":437,"draft":378},"\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":439,"title":440,"description":441,"published":442,"category":374,"image":443,"draft":378},"\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":445,"title":446,"description":447,"published":448,"category":374,"image":449,"draft":378},"\u002Fblog\u002Fstripe-secret-key-in-frontend","Une clé secrète Stripe dans votre frontend peut déplacer de l’argent","Une clé secrète Stripe exposée dans votre frontend peut rembourser, débiter et lire chaque fiche client que vous détenez. Votre clé pk_live_ y a sa place.","2026-09-19","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcard-800x500.png",{"path":451,"title":452,"description":453,"published":454,"category":374,"image":455,"draft":378},"\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":457,"title":458,"description":459,"published":460,"category":374,"image":461,"draft":378},"\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":463,"title":464,"description":465,"published":466,"category":374,"image":467,"draft":378},"\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":469,"title":470,"description":471,"published":472,"category":374,"image":473,"draft":378},"\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":475,"title":476,"description":477,"published":478,"category":424,"image":479,"draft":378},"\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":481,"title":482,"description":483,"published":484,"category":424,"image":485,"draft":378},"\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":487,"title":488,"description":489,"published":490,"category":424,"image":491,"draft":378},"\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":493,"title":494,"description":495,"published":496,"category":374,"image":497,"draft":378},"\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":499,"title":500,"description":501,"published":502,"category":374,"image":503,"draft":378},"\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":505,"title":506,"description":507,"published":508,"category":374,"image":509,"draft":378},"\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":511,"title":512,"description":513,"published":514,"category":374,"image":515,"draft":378},"\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":517,"title":518,"description":519,"published":520,"category":374,"image":521,"draft":378},"\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":523,"title":524,"description":525,"published":526,"category":374,"image":527,"draft":378},"\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":529,"title":530,"description":531,"published":532,"category":374,"image":533,"draft":378},"\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":408,"title":5,"description":377,"published":409,"category":374,"image":396,"draft":378},{"path":536,"title":537,"description":538,"published":539,"category":374,"image":540,"draft":378},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","Votre clé API OpenAI est exposée dans votre frontend. Changez-la.","Une clé API OpenAI exposée dans votre frontend ne peut être liée à aucun domaine. Changez-la aujourd'hui, passez par votre serveur et plafonnez la dépense.","2026-09-03","\u002Fblog\u002Fopenai-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":542,"title":543,"description":544,"published":545,"category":374,"image":546,"draft":378},"\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":548,"title":549,"description":550,"published":551,"category":424,"image":552,"draft":378},"\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":554,"title":555,"description":556,"published":557,"category":374,"image":558,"draft":378},"\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":560,"title":561,"description":562,"published":563,"category":424,"image":564,"draft":378},"\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":566,"title":567,"description":568,"published":569,"category":374,"image":570,"draft":378},"\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":572,"title":573,"description":574,"published":575,"category":374,"image":576,"draft":378},"\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":578,"title":579,"description":580,"published":581,"category":374,"image":582,"draft":378},"\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":584,"title":585,"description":586,"published":587,"category":374,"image":588,"draft":378},"\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":590,"title":591,"description":592,"published":593,"category":424,"image":594,"draft":378},"\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":596,"title":597,"description":598,"published":599,"category":424,"image":600,"draft":378},"\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":602,"title":603,"description":604,"published":605,"category":374,"image":606,"draft":378},"\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":608,"title":609,"description":610,"published":611,"category":374,"image":612,"draft":378},"\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":614,"title":615,"description":616,"published":617,"category":424,"image":618,"draft":378},"\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":359,"title":620,"description":621,"published":622,"category":374,"image":623,"draft":378},"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":625,"title":626,"description":627,"published":622,"category":374,"image":628,"draft":378},"\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":630,"title":631,"description":632,"published":633,"category":374,"image":634,"draft":378},"\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":636,"title":637,"description":638,"published":639,"category":424,"image":640,"draft":378},"\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":642,"title":643,"description":644,"published":645,"category":374,"image":646,"draft":378},"\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":648,"title":649,"description":650,"published":645,"category":424,"image":651,"draft":378},"\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":653,"title":654,"description":655,"published":656,"category":424,"image":657,"draft":378},"\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":659,"title":660,"description":661,"published":656,"category":374,"image":662,"draft":378},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","Quelles clés API sont sûres côté navigateur, et lesquelles non","Votre clé anon Supabase est faite pour être publique. Votre clé service_role non, et elle ignore toutes les règles que vous posez. Comment les distinguer.","\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend\u002Fcard-800x500.png",1790150953911]