[{"data":1,"prerenderedAt":305},["ShallowReactive",2],{"blog-fr-source-maps-exposed-in-production":3},{"id":4,"title":5,"body":6,"category":262,"cover":263,"coverAlt":263,"description":264,"draft":265,"extension":266,"faq":267,"image":283,"keywords":284,"meta":292,"navigation":293,"ogTitle":294,"path":295,"published":296,"seo":297,"stem":298,"tldr":299,"updated":296,"__hash__":304},"blog_fr\u002Fblog\u002Fsource-maps-exposed-in-production.md","Source maps exposées : votre app publie son code original",{"type":7,"value":8,"toc":251},"minimark",[9,13,16,21,24,27,30,44,48,51,54,65,71,74,78,81,107,110,118,122,125,128,136,139,143,146,149,154,161,165,168,171,181,196,203,207,235,243],[10,11,12],"p",{},"Vous avez scanné votre app, et une ligne du rapport dit que votre code source\noriginal est publié. Ou quelqu'un de technique a appuyé sur F12 sur votre site\net vous a dit que vos source maps étaient exposées. Dans les deux cas, cela\nsonne mal d'une façon précise et personnelle : ce que vous avez construit\npendant des mois traîne, semble-t-il, à la vue de tous, commentaires compris.",[10,14,15],{},"La lecture alarmiste et le haussement d'épaules ont tort tous les deux. Une\nsource map n'est pas un secret. C'est une carte (le nom est littéral) vers\nl'endroit où seraient vos secrets, si l'un d'eux s'est un jour glissé dans\nvotre code. Que la vôtre compte dépend de ce qu'il y a dedans, et le vérifier\nprend environ 30 secondes.",[17,18,20],"h2",{"id":19},"est-ce-grave-que-vos-source-maps-soient-exposées","Est-ce grave que vos source maps soient exposées ?",[10,22,23],{},"C'est à corriger cette semaine. C'est rarement une raison de paniquer ce soir.",[10,25,26],{},"Ce qu'une source map exposée révèle, c'est du code, et votre app remet déjà son\ncode à chaque visiteur, compressé en un bloc illisible, mais présent, parce\nque le web fonctionne ainsi. Un inconnu patient, avec les bons outils, pourrait\nen reconstruire une version approximative à partir du seul fichier compressé.\nLa carte supprime l'exigence de patience : avec elle, quiconque appuie sur F12\nlit votre projet tel qu'il apparaît dans votre éditeur.",[10,28,29],{},"Notre scanner classe une source map publiée comme un niveau moyen, le milieu de\nl'échelle de sévérité, et ce placement est délibéré. En soi, du code lisible\nest une perte de confidentialité : quelqu'un peut étudier comment votre app\nfonctionne, lire vos fonctionnalités à moitié finies, emprunter vos idées.\nDésagréable, et pour une app dont la valeur tient à un prompt astucieux ou à\nun parcours inhabituel, un vrai problème commercial. Pas une caisse ouverte.",[10,31,32,33,38,39,43],{},"Le poids change le jour où votre code contient quelque chose qui n'aurait\njamais dû être du code. Une clé qui tourne au sein de votre app finit aussi\ndans le fichier compressé. La carte la rend plus facile à trouver, mais elle\nétait déjà publiée, et c'est\n",[34,35,37],"a",{"href":36},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","un constat à part, plus grave",".\nLes commentaires, eux, sont différents. La compression les efface de ce qui est\nlivré, si bien que la carte est le seul endroit public où un commentaire\nexiste. Un mot de passe dans une ligne commentée, une note ",[40,41,42],"code",{},"remove before launch"," au-dessus de la chose qui n'a jamais été retirée, une adresse interne\nnotée à côté de la fonction qui l'appelle : rien de tout cela n'est accessible\nà un inconnu ailleurs que dans la carte.",[17,45,47],{"id":46},"ce-quest-vraiment-une-source-map","Ce qu'est vraiment une source map",[10,49,50],{},"C'est la traduction entre le code que votre site livre et le code que vous avez\nécrit.",[10,52,53],{},"Quand votre app est publiée, l'étape de build compresse votre code : tous les\nfichiers tassés ensemble, chaque nom raccourci à une ou deux lettres, chaque\ncommentaire supprimé, le tout sur une seule ligne géante. Les navigateurs\nl'exécutent sans broncher. Personne ne peut le lire, pas même les outils qui\nl'ont construit, ce qui devient un problème dès que quelque chose plante et que\nl'erreur pointe vers la ligne 1, caractère 48 120, d'un fichier qu'aucun humain\nn'a jamais vu.",[10,55,56,57,60,61,64],{},"Alors les outils de build écrivent un second fichier, la source map. Elle se\nplace à côté du fichier compressé (",[40,58,59],{},"app.js"," reçoit ",[40,62,63],{},"app.js.map",") et contient\ntout ce que la compression a jeté : vos fichiers d'origine, leurs noms, leur\narborescence et chaque commentaire. La dernière ligne du fichier compressé\nporte l'adresse de la carte, et un navigateur va chercher la carte quand ses\noutils de développement s'ouvrent. C'est tout le principe. Elle existe pour\nqu'une erreur puisse pointer vers le code que vous avez réellement écrit.",[66,67],"diagram",{"alt":68,"caption":69,"src":70},"À gauche, un fichier de bundle compressé dessiné comme un mur de traits illisibles, avec son fichier de source map en dessous. Un chevron mène à droite vers la même app rendue lisible : un dossier src, des fichiers de composants et des lignes de code dont deux lignes de commentaire sont surlignées en ambre.","Le fichier compressé est ce que vos visiteurs exécutent. La carte le retransforme en projet que vous avez écrit. Les commentaires, retirés du bundle, n'existent que du côté lisible.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fwhat-the-map-reveals-1600x720.png",[10,72,73],{},"Deux choses découlent de ce principe. Vos visiteurs ne téléchargent jamais la\ncarte (un navigateur ne la demande que lorsque les outils de développement\ns'ouvrent), donc une carte publiée ne coûte rien, ne change rien à l'écran et\nne se signale jamais. Et tout ce qui peut ouvrir votre site peut récupérer la\ncarte, parce que l'adresse est écrite dans la page et qu'aucun login ne la\nprotège. La présence du fichier est un réglage de build, et de l'extérieur,\nactivé ressemble exactement à désactivé jusqu'à ce que quelqu'un aille voir.",[17,75,77],{"id":76},"comment-vérifier-votre-app-en-30-secondes","Comment vérifier votre app en 30 secondes",[10,79,80],{},"Sur votre app en ligne, l'adresse publiée que visitent vos utilisateurs, pas\nl'aperçu à l'intérieur de votre builder :",[82,83,84,88,96],"ol",{},[85,86,87],"li",{},"Ouvrez l'app dans Chrome, Edge ou Firefox et appuyez sur F12. Cela ouvre les\noutils de développement du navigateur, le même panneau qu'utiliserait un\ninconnu.",[85,89,90,91,95],{},"Cliquez sur l'onglet ",[92,93,94],"strong",{},"Sources",", en haut du panneau.",[85,97,98,99,102,103,106],{},"Lisez l'arborescence de fichiers à gauche. Du code compressé ressemble à un\nou deux fichiers aux noms du type ",[40,100,101],{},"index-4f81ab2c.js",". Des source maps\nressemblent à votre projet : un dossier nommé ",[40,104,105],{},"src",", des fichiers portant\nles noms de vos pages et composants, et dedans du code que vous pouvez\nréellement lire.",[10,108,109],{},"Si vous pouvez y ouvrir un fichier et voir vos propres commentaires, vos source\nmaps sont publiées. Le navigateur ne dessine cette arborescence que parce qu'il\na récupéré la carte depuis votre site en ligne, exactement comme le ferait le\nnavigateur de n'importe qui d'autre.",[10,111,112,113,117],{},"Si vous préférez ne pas fouiller dans des panneaux, notre scan gratuit lit\nvotre site en ligne depuis l'extérieur et rapporte ce test avec huit autres :\n",[34,114,116],{"href":115},"\u002F#scan","scanner votre app",". Une vingtaine de secondes, aucun compte.",[17,119,121],{"id":120},"ce-quun-inconnu-peut-voir-et-ce-quil-ne-peut-pas","Ce qu'un inconnu peut voir, et ce qu'il ne peut pas",[10,123,124],{},"Tout ce que vous avez écrit dans l'app elle-même, et rien au-delà.",[10,126,127],{},"Des source maps publiées révèlent votre frontend : vos pages, vos composants,\nla logique qui tourne dans le navigateur, les noms des routes que votre app\nappelle, chaque prompt que vous avez écrit dans l'app, et chaque commentaire.",[10,129,130,131,135],{},"Elles n'atteignent pas votre serveur. Le code qui tourne dans une edge function\nou un backend reste où il est. Elles n'ouvrent pas non plus votre base de\ndonnées. Qu'un inconnu puisse lire vos tables se décide par les règles posées\nsur chaque table, pas par la visibilité de votre code, et\n",[34,132,134],{"href":133},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","nous avons mesuré cette question séparément","\nsur les mêmes apps.",[10,137,138],{},"En pratique, le dégât d'une carte publiée arrive sous forme de lecture\nsilencieuse plutôt que d'effraction spectaculaire : quelqu'un étudie votre\nlogique de paiement pour la contourner, ou trouve une route d'administration\nque personne n'a jamais reliée et l'essaie. Chacun de ces cas ne devient un\nproblème que si la chose trouvée n'était pas protégée. La carte est un guide\npour l'inconnu ; elle n'est pas elle-même la porte ouverte.",[17,140,142],{"id":141},"à-quelle-fréquence-trouve-t-on-des-source-maps-publiées","À quelle fréquence trouve-t-on des source maps publiées",[10,144,145],{},"En août 2026, nous avons scanné 30 998 apps en ligne publiées depuis Lovable,\nBase44, Replit, v0 et Bolt. Une sur huit (13 %) servait au moins une source\nmap en état de marche.",[10,147,148],{},"Nous ne comptons une carte que si elle répond réellement. L'adresse au bas d'un\nfichier compressé ne prouve rien à elle seule, car bien des builds écrivent\nl'adresse sans jamais téléverser le fichier ; notre scanner la suit et vérifie\nqu'une vraie carte revient. Et là où le test n'a pas pu aller au bout, nous\navons noté qu'il n'a pas pu aller au bout. Une app que nous n'avons pas pu\nvérifier est inconnue, pas propre.",[66,150],{"alt":151,"caption":152,"src":153},"Un fichier de bundle compressé se terminant par la ligne sourceMappingURL=index-4f81.js.map, avec deux issues possibles dessinées en dessous. Dans l'une, la requête vers la carte renvoie 200 avec un fichier JSON et porte une croix ambre : le code est publié. Dans l'autre, elle renvoie 404, marquée d'une coche verte.","L'adresse seule ne prouve rien. Le constat, c'est une carte qui répond. Un 404 à cette adresse signifie que le réglage est coupé, quoi que dise la dernière ligne du bundle.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fdoes-the-map-answer-1600x640.png",[10,155,156,157,160],{},"Deux autres chiffres du même balayage remettent celui-ci à sa place. La fuite\ncontre laquelle on met le plus en garde les propriétaires (une clé secrète\ndans la page, du genre qui ignore toutes les règles de la base de données) est\napparue 3 fois dans ces 30 998 apps. Et une table de base de données lisible\npar n'importe quel inconnu est apparue dans\n",[34,158,159],{"href":133},"plus de la moitié des apps où ce test a pu aller au bout",".\nLes source maps exposées se situent entre les deux : bien plus courantes que la\nfuite célèbre, bien moins directement dommageables que la table ouverte. C'est\nexactement ce qu'une sévérité moyenne essaie de vous dire.",[17,162,164],{"id":163},"comment-couper-les-source-maps-en-production","Comment couper les source maps en production",[10,166,167],{},"Un réglage de build, puis un redéploiement.",[10,169,170],{},"Si un builder a fait votre app, dites-le-lui en termes simples, en anglais,\nlà où les builders sont les plus fiables :",[172,173,178],"pre",{"className":174,"code":176,"language":177},[175],"language-text","Disable source map generation for production builds and redeploy.\n","text",[40,179,176],{"__ignoreMap":180},"",[10,182,183,184,187,188,191,192,195],{},"Si vous gérez le code vous-même, le réglage vit dans la configuration de\nbuild. Dans un projet Vite (ce qui se trouve sous la plupart des apps Lovable\net Bolt), c'est ",[40,185,186],{},"build.sourcemap: false"," dans ",[40,189,190],{},"vite.config"," ; une app Nuxt a\nsa propre option ",[40,193,194],{},"sourcemap",". Redéployez, puis refaites le test de 30\nsecondes : l'arborescence lisible sous Sources doit avoir disparu, et seuls\nles noms compressés doivent rester.",[10,197,198,199,202],{},"Deux suites à donner avant de classer l'affaire. Couper les cartes ne rappelle\npas les copies. Quiconque a récupéré votre carte pendant qu'elle était en\nligne détient votre code tel qu'il était ce jour-là. Lisez donc votre propre\ncode avant de vous détendre : si une clé, un mot de passe ou quoi que ce soit\nqui ne devrait pas être public y est écrit quelque part,\n",[34,200,201],{"href":36},"faites-le tourner maintenant"," ;\nretirer la carte ferme la porte aux nouveaux lecteurs, pas à ce qui a déjà été\ncopié. Et le réglage peut revenir : une mise à jour de template, une\nconfiguration régénérée ou une nouvelle cible de déploiement peut réactiver\nles cartes sans que vous ayez touché à rien.",[17,204,206],{"id":205},"quoi-faire-maintenant","Quoi faire maintenant",[208,209,210],"key-takeaways",{},[211,212,213,219,226,229,232],"ul",{},[85,214,215,216,218],{},"Appuyez sur F12 sur votre app en ligne, ouvrez Sources et cherchez un dossier nommé ",[40,217,105],{},". Des fichiers lisibles avec vos propres commentaires signifient que vos source maps sont publiées.",[85,220,221,222,225],{},"Coupez-les avec une seule consigne à votre builder (disable source maps for production builds and redeploy) ou passez vous-même ",[40,223,224],{},"sourcemap: false"," dans la configuration de build.",[85,227,228],{},"Lisez ce que la carte révélait avant de vous détendre. Une clé ou un mot de passe quelque part dans votre code, c'est une rotation aujourd'hui, car retirer la carte ne reprend pas les copies déjà faites.",[85,230,231],{},"Laissez tranquilles les source maps de développement. Elles font leur travail, et seule la version publiée est en question.",[85,233,234],{},"Refaites le test de 30 secondes après les mises à jour de template et les gros déploiements. Ce réglage a une manière bien à lui de revenir tout seul.",[10,236,237,238,242],{},"C'est cette dernière habitude qui glisse, parce que rien n'a l'air différent\nquand la réponse change. Reeve Care relance ce même scan contre votre app en\nligne selon un calendrier, ce test compris, et vous écrit quand un résultat se\ndégrade : ",[34,239,241],{"href":240},"\u002F#pricing","ce qu'il surveille et ce que ça coûte",".",[10,244,245,246,250],{},"Si vous préférez tout refermer en une seule fois, la\n",[34,247,249],{"href":248},"\u002Fchecklist","checklist de sécurité en 10 minutes"," couvre ceci avec les autres\nportes qui méritent un coup d'œil dans une app fraîchement lancée.",{"title":180,"searchDepth":252,"depth":252,"links":253},3,[254,256,257,258,259,260,261],{"id":19,"depth":255,"text":20},2,{"id":46,"depth":255,"text":47},{"id":76,"depth":255,"text":77},{"id":120,"depth":255,"text":121},{"id":141,"depth":255,"text":142},{"id":163,"depth":255,"text":164},{"id":205,"depth":255,"text":206},"Bases de la sécurité",null,"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.",false,"md",[268,271,274,277,280],{"q":269,"a":270},"On m'a dit que mes source maps étaient exposées. Est-ce une fuite de données ?","Non. Une source map contient votre code, pas les données de vos utilisateurs. Votre base de données n'y figure pas, et rien de votre serveur non plus. Cela devient sérieux seulement si le code lui-même contient quelque chose de secret : une clé, un mot de passe, une adresse interne. Lisez ce qui est réellement écrit dans la vôtre avant de décider de la gravité de la nouvelle.",{"q":272,"a":273},"Peut-on voler mon app si mes source maps sont publiques ?","On peut lire votre code frontend (pages, composants, logique côté navigateur et commentaires), ce qui rend la copie de vos idées plus facile qu'elle ne l'était déjà. On n'obtient ni votre code serveur, ni votre base de données, ni vos utilisateurs. Pour la plupart des apps, le risque concret n'est pas le vol du code ; c'est le secret qui s'est retrouvé écrit dans le code en chemin.",{"q":275,"a":276},"Comment retirer les source maps de mon build de production ?","Dites-le à votre builder en termes simples : disable source map generation for production builds and redeploy. Si vous gérez le code vous-même, le réglage se trouve dans la configuration de build : dans un projet Vite, c'est build.sourcemap dans vite.config ; passez-le à false et redéployez. Revérifiez ensuite avec F12 : l'arborescence lisible sous Sources doit avoir disparu.",{"q":278,"a":279},"Les source maps en développement sont-elles aussi un problème ?","Non. Les source maps existent pour le développement. Ce sont elles qui font qu'une erreur pointe vers le vrai fichier et la vraie ligne que vous avez écrits, plutôt que quelque part dans une unique ligne compressée géante. Votre aperçu de développement est un endroit que vous seul regardez. La seule question qui compte est de savoir si votre site publié les sert au monde entier.",{"q":281,"a":282},"Mon scan dit que mon code source original n'est pas publié. Suis-je tranquille ?","Cela veut dire qu'aucune source map en état de marche n'a répondu quand nous avons regardé, rien de plus. Votre code compressé reste public, comme celui de toutes les apps, et un déploiement ultérieur peut changer la réponse sans bruit, ce qui est la raison pour laquelle le test mérite d'être refait après les gros changements.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fcard-800x500.png",[285,286,287,288,289,290,291],"source maps exposées production","source map exposée","supprimer les source maps en production","faut-il publier les source maps","source maps publiques","sourceMappingURL","vite sourcemap false",{},true,"Source maps exposées : votre app publie-t-elle son code ?","\u002Fblog\u002Fsource-maps-exposed-in-production","2026-08-18",{"title":5,"description":264},"blog\u002Fsource-maps-exposed-in-production",[300,301,302,303],"Une source map exposée laisse n'importe qui lire le code source original de votre app (composants, logique et chaque commentaire) depuis son navigateur.","En soi, ce n'est pas une fuite. Le code n'est pas un secret. Mais une source map est une carte vers l'endroit où seraient vos secrets, si l'un d'eux s'est un jour glissé dans votre code.","Une app sur huit parmi les 30 998 apps vibe-codées que nous avons scannées en août 2026 publiait ses source maps.","Le test prend 30 secondes dans votre navigateur, et la correction tient dans un seul réglage de build.","htbAlchEMzMZQHfs8GYDkaPTnCRanukejYm6JO98uXs",1787826048205]