Vue normale

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.
À partir d’avant-hierFlux principal

J'ai créé mon propre outil de stats sans tracking

Par : Korben ✨
21 juillet 2026 à 17:34

Un site sans cookie de mesure d'audience et sans bandeau de consentement, c'est reposant je trouve... Sauf qu'à cause de ça, bah je ne savais plus trop combien de gens venaient me lire tous les jours. Relou hein ?

C'était ma situation depuis un moment déjà, vu que tout ce qui servait à mesurer l'audience a dégagé de korben.info il y a un bon bout de temps. Alors faute de mieux, je me suis rabattu sur AWStats, qui lit bêtement les logs Apache du serveur mais bon, c'est pas terrible, parce qu'avec le cache de Cloudflare, il y a une grosse partie de mon trafic qui n'est pas pris en compte.

En effet, quand Cloudflare possède une copie valide de la page dans son cache, il peut la renvoyer directement sans contacter le serveur d'origine. Vous êtes donc bien un visiteur réel, mais Apache ne voit aucune requête et AWStats ne vous comptabilise pas. Du coup, tous les outils fondés exclusivement sur les logs d'origine sous-estiment la part du trafic absorbée par le cache.

Après il y a bien le classique Google Analytics, mais bon même configuré en mode full RGPD, ça reste Google et ça appelle quand même un service tiers aux US... Vous connaissez aussi déjà des alternatives propres, puisque je vous ai parlé de Matomo, Plausible et de Vince Analytics , mais elles ajoutent toutes une mesure côté navigateur, avec un script, un pixel ou un stockage local (le localstorage) et moi, je ne voulais aucun outil d'audience de plus dans vos pages !

De son côté, Cloudflare lui, voit chaque requête HTTP qui atteint son réseau, y compris celles auxquelles son cache répond. Ses chiffres couvrent donc beaucoup mieux le trafic HTTP que mes logs d'origine. Le souci, c'est que son dashboard, je ne l'aime pas. Je le trouve incomplet, mal foutu, chiant à utiliser, et il ne montre pas ce que j'ai envie de voir.

Donc, histoire d'avoir ce que je voulais, j'ai fini par coder le mien. Enfin, entièrement vibe codé et ça tourne aussi bien sur un serveur qu'en local sur une machine de bureau.

Petite parenthèse pendant que j'y suis, vous ne le savez peut-être pas mais depuis que ChatGPT a débarqué dans nos vies fin 2022, tout ce que je développe moi-même sur ce site et l'ensemble de mes outils internes sont vibes codés avec des LLMs comme ceux d'OpenAI et d'Anthropic. C'était une purge au tout début et maintenant ça s'est tellement amélioré et je me suis tellement spécialisé là-dedans, que le code n'est devenu qu'une formalité. Ne hurlez pas, mon site est statique et j'envoie pas de fusée dans l'espace !

Mon collecteur s'exécute en local, cause à une API, et il n'envoie pas une seule ligne de mesure dans votre navigateur. Bref, que mon backend soit écrit avec un LLM, à la main ou en Brainfuck, vous chargez exactement la même chose de mon outil de stats, c'est-à-dire rien du tout. La garantie est donc architecturale et pas une question de talent.

Et surtout, mon outil de stats n'ajoute aucune mesure dans votre navigateur. Aucun JavaScript ni cookie supplémentaire n'est posé par mon outil. À la place, il lit l'API GraphQL Analytics de Cloudflare, en lecture seule et récupère des compteurs déjà agrégés par jour et par dimension. Cela veut dire par exemple, que quand je récupère le nombre "nombre d'IP distinctes par jour", je ne récupère pas les IPs en tant que telles mais juste un total que Cloudflare me communique et qu'il a déjà traité en amont.

Et vous n'êtes pas obligés de me croire sur parole, parce que c'est vérifiable en 10 secondes... Ouvrez l'inspecteur de votre navigateur, onglet Réseau, et rechargez cette page. Vous ne verrez aucun script de mesure d'audience, aucun appel vers un domaine tiers et aucune iframe. Même les vidéos YouTube ne se chargent qu'au moment où vous cliquez sur la vignette. Le seul truc qui bouge, c'est le compteur du footer qui télécharge un nombre, sans rien renvoyer derrière.

Attention, ce n'est pas à confondre avec Cloudflare Web Analytics et ses mesures RUM (Real User Monitoring) puisque cette fonctionnalité injecte un bout de JavaScript pour mesurer les performances ressenties dans le navigateur. Chez moi, c'est désactivé tout ça.

Maintenant soyons clairs sur un point, parce que c'est l'objection évidente et qu'elle est parfaitement légitime... Cloudflare, lui, voit bien votre adresse IP. Pas à cause de mon outil de stats, mais parce que c'est un reverse proxy et que c'est mécaniquement ce qui se passe dès qu'un site est derrière un CDN. Votre requête arrive chez eux avant d'arriver chez moi, sinon ils ne pourraient ni router, ni mettre en cache, ni bloquer une attaque. Mon outil ne change rien à ça, il se contente de lire des totaux déjà calculés et je ne récupère jamais la moindre IP. Tout est détaillé dans mes CGU, avec les bases légales, les durées et la liste des cookies de sécurité, si vous voulez le détail complet.

Mon outil et le compteur que vous pouvez retrouver dans le footer de mon site reposent sur les requêtes collectées côté serveur chez Cloudflare et sans l'analyse web, je ne peux juste pas suivre par exemple un parcours utilisateur, connaitre un taux de rebond ou évaluer les temps de chargement mesurés chez les lecteurs. Rien de grave donc...

Maintenant, il y a un souci chez Cloudflare, c'est que selon le jeu de données et le forfait que vous payez ou non, le détail ne reste interrogeable que durant une fenêtre limitée de temps. Mon outil doit donc passer chaque jour récupérer les agrégats encore disponibles et les stocker dans une base SQLite sur mon serveur ou en local, selon la façon dont on l'a déployé.

Ça me permet de garder mon propre historique agrégé. J'ai aussi activé le Super Bot Fight Mode de Cloudflare, qui réduit une large partie du trafic automatisé, mais attention, ça ne me donne pas pour autant des stats sans aucun bot. Les crawlers autorisés comme Googlebot et ceux qui passent entre les mailles du filet restent comptabilisés dans mes chiffres, exactement comme avec tous les autres outils de mesure web. Et je préfère le dire clairement plutôt que de vous vendre des chiffres "propres" qui ne le sont jamais totalement, vu qu'un filtre anti-bot ne peut retirer que les bots qu'il a détectés.

À côté de ça, j'ai aussi branché ma Google Search Console, et là non plus sans installer la moindre bibliothèque tierce... Je signe moi-même un JWT en RS256 avec le module crypto natif de Node, je l'échange contre un jeton d'accès chez Google, et le compte de service que j'utilise est restreint au scope lecture seule. Ça m'apporte des statistiques agrégées sur les impressions, les positions, les requêtes de recherche et surtout Discover !!

Si je devais résumer ça, je dirais que Cloudflare estime le volume de trafic et que Search Console montre quelles recherches produisent des impressions et des clics, même si sans aucun tracking en place, ça n'explique évidemment pas la motivation de chaque lecteur. Mais osef ! Et comme Cloudflare embarque aussi son pare-feu, j'en profite pour rapatrier des statistiques sur les événements de sécurité et les routes attaquées, comme ça, je peux tout voir au même endroit.

Maintenant, le vrai plaisir, c'est de pouvoir afficher ce que je veux dans mon propre dashboard. Par exemple, la répartition par langue, les navigateurs, d'où provient le trafic avec un joli petit camembert, les pays, l'état de mon cache, la bande passante, etc. Et quand j'ai un nouveau besoin qui me pête dans le cerveau, je peux ajouter une vue rapidement et je ne m'encombre pas de ce qui ne me sert pas.

Sans traceur placé chez vous, je ne connais donc pas les sessions, le taux de rebond, le parcours de lecture, les entonnoirs de conversion, donc impossible de savoir si vous êtes revenu hier, ni dans quel ordre vous avez lu 3 articles. Mais je m'en tape complètement puisque ces métriques ne m'ont jamais servi à rien.

Ce que je veux connaitre, c'est surtout l'ordre de grandeur de l'audience et le nombre de pages demandées. Le parcours individuel et les entonnoirs de conversion, c'est surtout un besoin de régie publicitaire ou de site e-commerce, et pas d'un site comme le mien. Quand on sait que les bandeaux de cookies nous coûtent 575 millions d'heures perdues collectivement, et que l'Europe réfléchit enfin à les alléger , s'en passer n'est pas vraiment une punition.

Bref, mes stats sont maintenant plus digestes que celles d'AWStats, sans avoir à vous tracker ou vous faire charger quoi que ce soit. Ça me va donc très bien. Et si vous voulez un avant-goût de la technique derrière l'outil, j'ai montré récemment comment vous faire un compteur de fréquentation gratuit , donc n'hésitez pas à y jeter un œil...

Empreintes et ADN - Le vrai prix de votre ESTA

Par : Korben ✨
20 juillet 2026 à 17:16

Vos empreintes digitales, votre photo et jusqu'à votre ADN, voilà ce que les États-Unis aimeraient consulter directement dans les fichiers de police européens. Le deal s'appelle Enhanced Border Security Partnership (EBSP), et la monnaie d'échange, vous la connaissez bien si vous avez déjà voyagé aux États-Unis. C'est ce petit formulaire ESTA que vous remplissez avant de filer à New York ou ailleurs (celui qui vous évite le visa).

Le projet d'accord, vous n'étiez pas censé le lire, mais l'ONG Statewatch l'a publié en avril dernier et son article 3 range dans les données biométriques vos empreintes, vos photos et vos données génétiques (oui, votre ADN). Washington réclame cet accès depuis février 2022 à tous les pays dont les citoyens, comme vous, voyagent sans visa, et le Conseil de l'UE a autorisé la Commission à négocier le 16 décembre 2025.

Bruxelles jure vouloir un système de requête ponctuelle (c'est-à-dire un tuyau d'accès), avec ce que le mandat du Conseil appelle "une limitation claire des finalités des données échangées, avec des déclencheurs très spécifiques". Sauf que la demande américaine d'origine, elle, parle de cribler "de façon routinière" les bases biométriques des pays partenaires.

Entre les deux il y a donc un gouffre !

Et le texte ne s'arrête d'ailleurs pas à la biométrie puisqu'il prévoit de faire circuler des "indications de risque" pour déterminer si votre entrée "poserait un risque réel pour la sécurité publique ou l'ordre public". Traduisez : votre profil, vos fréquentations, vos opinions. Vous vous souvenez de ce touriste refoulé à cause d'un mème sur JD Vance ? Ou toutes ces histoires de douaniers qui fouillent votre téléphone à l'arrivée ? Bah je vous laisse imaginer la cata...

Statewatch pointe surtout la contradiction avec le droit européen lui-même. L'article 9 du RGPD interdit en principe de traiter les données génétiques, et le projet se contente de "garanties appropriées". En effet, la Charte protège les Européens contre la discrimination fondée sur les opinions politiques mais ça, le texte qui cadre ce Enhanced Border Security Partnership, n'en dit rien.

La Cour de justice de l'UE avait retoqué en 2022, dans son arrêt sur le PNR (Passenger Name Record), les traitements automatisés qui décident sans humain dans la boucle, et voilà que ça revient sur le devant de la scène d'une autre manière.

Franchement, c'est relou. On nous impose des bandeaux cookies sur chaque site de recettes de cuisine, on fait tenir un registre de traitement au moindre club de pétanque et pendant ce temps-là, le Conseil européen négocie tranquillou un accès que j'estime abusif pour une administration étrangère à des fichiers d'empreintes (biométriques) nationaux. Ça fait un peu mal au cul vous ne trouvez pas ???

Alors, certes, on voyage sans visa, même si, quelque part, l'ESTA c'est un peu un visa qui ne dit pas son nom. Enfin, moi, je vois pas trop la différence sur le fond... Et puis dans cette Europe à deux vitesses, on a quand même la Bulgarie, Chypre et la Roumanie qui, eux, ont besoin d'un visa. Donc on n'est pas très solidaire sur le coup.

Puis je vous rappelle que les fichiers d'identité français ne sont pas franchement des coffres-forts quand on pense par exemple à l'ANTS qui s'est fait siphonner 19 millions de dossiers via une faille basique . Et sur le sérieux de nos amis américains, je repense à cette grand-mère américaine qui a passé six mois en prison à cause d'un faux positif de reconnaissance faciale, et je me dis que si on y ajoute un croisement transatlantique automatisé des données, ça va pas être joli joli en termes de bourdes...

Bref, pour le moment rien n'est signé et les États membres se déchirent encore sur la portée et les durées de conservation de NOS données qu'ils vont offrir aux États-Unis. Et on verra bien si le Parlement va donner son feu vert, mais en tout cas c'est maintenant que tout se joue.

Voilà, surveillez ce dossier de près et je vous invite à aller lire l'analyse de Statewatch parce qu'elle est plutôt salée.

Un compteur de visiteurs sur votre site, sans payer un centime

Par : Korben ✨
12 juillet 2026 à 07:45

Vous avez peut-être remarqué un petit point rouge tout en bas de mon site, avec un nombre à côté. Il s'agit du nombre de personnes passées sur le site durant la dernière heure.

Je voulais remettre ce truc depuis un bail, bien à l'ancienne comme dans les années 2000 mais sur un site statique, qui plus est sans tracker de stats JS type Google Analytics ou Matomo, et sans cookies de tracking, c'était pas franchement une option... jusqu'à maintenant !

Le compteur, en vrai, tout en bas de korben.info.

La solution évidente sur des sites statiques, c'est souvent un petit Worker Cloudflare qui compte les visiteurs et servirait le chiffre, mais ça se facture à chaque requête. À 390 000 pages vues par jour, ça grimpe vite à des dizaines de millions d'invocations par mois, soit dans les 6 à 7 dollars. C'est pas super cher mais pour un compteur qui n'est utile qu'à satisfaire mon égo tout en sachant s'il y a du monde aujourd'hui, ça ne sert strictement à rien ! Donc le Worker, je l'ai écarté direct.

Du coup j'ai fait ça à l'ancienne. Un petit script Python tourne sur la machine qui héberge le site, une fois par minute. Il pose une seule question à Cloudflare, à savoir combien d'adresses IP distinctes ont chargé une page durant la dernière heure (ou demi-heure, ou quart d'heure ou 5 min, c'est vous qui paramétrez), il écrit la réponse dans un minuscule fichier live.json de quelques centaines d'octets, et c'est tout. Ce fichier, Cloudflare le sert ensuite depuis son cache comme il servirait une image, gratuitement. Zéro Worker, zéro base de données, zéro abonnement, j'ai exactement le même résultat sans dépenser une thune.

Maintenant, faut que je sois clair sur ce que ce chiffre raconte. C'est le nombre de navigateurs distincts ayant chargé une page durant la dernière heure, hors trafic interne de Cloudflare. C'est un "*combien de monde est passé récemment *", pas un "combien lisent là tout de suite".

Et les bots là-dedans ?

En fait, les bots pourris , ceux qui scrapent en boucle, se font bloquer en amont par le Super Bot Fight Mode de Cloudflare, donc ils n'arrivent même pas jusqu'à mon site. Restent les gentils bots, du genre de Googlebot et compagnie, que je laisse passer exprès, parce que les bloquer reviendrait à me flinguer mon référencement. Sur les 7 derniers jours, Cloudflare classe à peine 4% comme bots vérifiés. Donc c'est une goutte d'eau, surtout qu'ils tournent sur une poignée d'IP. Donc oui, mon compteur avale deux ou trois crawlers au passage, mais je ne voulais pas vous mentir en écrivant "zéro bot". Mais l'essentiel c'est que les nuisibles, eux, ne soient pas comptabilisés.

J'ai aussi dû gérer un petit piège car l'API de Cloudflare plafonne sa réponse à 10 000 lignes. Et comme sur une heure entière de trafic ça peut se remplir vite, si je crève ce plafond, la requête sous-compterait sans rien dire. Donc le script lève un flag et le compteur affiche "10 000 personnes ou plus" plutôt qu'un faux nombre. Quand j'y serai aux 10 000 et plus, je pense que je réduirai alors le delta temps en passant de 1h à 30 min...etc.

Côté vie privée, c'est carré également. Cloudflare renvoie à mon serveur une liste JSON des IP passées dans l'heure, mon script en compte le nombre de distinctes, et efface cette liste de sa mémoire dans la milliseconde qui suit. Aucune IP n'est stockée, aucune n'atterrit dans un log, aucun fichier avec les IPs n'est créé sur le disque... Il ne reste qu'un entier. Comme je vous le disais, pas de cookie , pas de traceur, et rien qui touche votre navigateur . Et comme le compteur ne s'affiche jamais en dessous de 10 personnes, impossible d'isoler qui que ce soit.

Maintenant, si vous voulez le même chez vous, sachez que j'ai tout balancé en open source sur GitHub , sous licence MIT, donc servez-vous. Voici les pré-requis :

  1. votre site doit être derrière Cloudflare, le plan gratuit suffit largement.
  2. vous générez un token API Cloudflare avec le droit de lecture sur les analytics.
  3. vous posez le script live_count.py sur votre serveur et vous le lancez une fois par minute (ou toutes les 5 ou 10 min) via un cron.
  4. vous ajoutez le bout de JavaScript et son span dans vos pages, tout se règle par des attributs, aucun script inline, donc ça passe même avec une politique de sécurité stricte.

Le seul truc sur lequel ne pas vous louper, c'est de mettre un temps de cache court à live.json. Si c'est trop long, tous vos visiteurs verraient un chiffre périmé.

Voilà. Un petit compteur maison simili-live sans tracking et qui ne me coûte rien, c'est le bonheur !

Données de santé Doctolib - Comment vous opposer à leur usage IA ?

Par : Korben ✨
8 juillet 2026 à 17:23

Cet aprem, je bossais tranquillou quand j'ai reçu un mail de DoctoLib qui m'a bien énervé avec pour titre : "Doctolib s'engage dans la recherche pour améliorer la santé". Bon, si on s'arrête au titre, on se dit "Ah bravo, Doctolib", sauf qu'en le lisant en entier, j'ai vite compris qu'ils venaient de décider à ma place que mes données de santé allaient nourrir des trucs, des bidules et des machins pour de la recherche en intelligence artificielle.

Et bien sûr que si ça ne me plaisait pas, bah fallait que je le dise.

Alors ce qu'ils expliquent dans ce mail, c'est qu'à partir d'août 2026, Doctolib lance un projet de recherche mené par une équipe associée à Inria, l'Inserm et l'Université Paris Cité pour, je cite "améliorer les parcours de soins grâce à l'IA". Jusque-là, difficile de cracher dessus, ce sont des institutions publiques sérieuses et l'objectif est louable. Le truc, c'est ce qu'ils vont manger pour y arriver : nos données démographiques, nos données de santé, et même celles de vos proches rattachés à votre compte. Et cela que ces données aient été renseignées par nous ou par nos soignants.

Et surtout, Doctolib ne nous demande pas notre accord. Ils s'appuient sur ce qu'on appelle l'intérêt légitime, une base légale du RGPD qui leur permet de piocher dans nos données sans passer par la case consentement. Hé ouais, en clair, on ne vous prend pas votre consentement, on vous l'enlève. Vous n'avez même pas à dire oui, c'est déjà oui par défaut, et vous êtes obligé de dire non si vous voulez sortir du dispositif.

Ils présentent ça comme de l'intérêt légitime, sauf qu'en même temps on ne sait pas du tout sur quoi ils vont bosser, on ne sait pas avec qui ils vont bosser, on ne sait pas comment nos données seront sécurisées, bref, on ne sait rien du tout. Alors forcément, moi je m'inquiète surtout que leur mail annonce clairement que d'autres travaux suivront, "avec des hôpitaux ou des institutions privées ou publiques". Donc on accepte qu'ils signent à notre place un chèque en blanc avec nos données pour des projets futurs dont personne ne connaît le contenu et basta, tout ça sous couvert d'intérêt légitime. Ce n'est que mon avis mais je trouve ça vraiment léger.

Alors oui, tout ça est parfaitement légal. Doctolib s'appuie sur la méthodologie MR-004 de la CNIL , qui encadre la recherche en santé et autorise justement ce fonctionnement par opposition plutôt que par consentement. Rien d'illégal là-dedans. Mais légal ne veut pas dire que je dois être d'accord.

Et c'est bien ça le problème... Ce cadre légal permet à une entreprise privée comme Doctolib de considérer que nos données de santé lui appartiennent assez pour les offrir (ou les revendre, je n'en sais rien ??) à la recherche, tant que vous ne levez pas la main pour refuser.

Doctolib tente de nous rassurer aussi en expliquant que les données sont pseudonymisées et "ne permettent pas de nous identifier directement". Notez bien le "directement", lol, ça ne se mouille pas trop. En réalité, pseudonymisé, ça ne veut pas dire anonyme... Ça veut seulement dire qu'on a remplacé votre nom par un code, mais que le lien existe toujours quelque part et reste réversible. Aux yeux de la loi, ça reste encore vos données personnelles . La vraie anonymisation, elle, est irréversible, et ce n'est pas ce dont on parle ici.

Et puis il y a le contexte... Non, Doctolib n'a pas subi de grosse fuite de données, il faut être honnête là-dessus mais on nage actuellement dans un écosystème tech en France qui prend l'eau de partout : 33 millions de Français touchés par le piratage des mutuelles Viamedis et Almerys début 2024, une quinzaine de millions de plus avec la fuite Cegedim en 2026. Chaque base de données de santé qui se constitue quelque part, c'est une cible de plus.

Et il y a un mois à peine, le Canard Enchaîné accusait Doctolib de transmettre des infos à Google, Microsoft et Anthropic pour de l'IA. Doctolib a répondu que ces boîtes n'étaient que des prestataires techniques qui n'entraînent pas leurs modèles avec vos données. Alors peut-être, hein, mais quand on nous demande de faire confiance sur parole pour des données aussi intimes que notre santé, l'inquiétude a le droit d'exister.

Bref, moi je m'oppose, et si vous êtes sur Doctolib je vous invite au moins à décider en connaissance de cause. Le mail est probablement arrivé dans vos spams, donc pour refuser, sachez que ça se passe dans les paramètres de confidentialité de votre compte, via le formulaire d'exclusion de la recherche . Ça bloque toute utilisation future de vos données et de celles de vos proches, sans aucun impact sur vos rendez-vous ni sur vos soins. Faites-le avant août 2026, car c'est le moment où le premier projet démarre.

Enfin bref, moi je pense qu'on devrait avoir à donner son accord, et pas à courir derrière ces boîtes pour retirer un accord qu'on n'a jamais donné en pleine conscience... C'est ça qui me dérange surtout.

Le dernier mail de Doctolib cache un projet d’IA : voici comment s’y opposer

8 juillet 2026 à 11:09

Dans un mail envoyé le 8 juillet 2026, Doctolib présente son nouveau projet de recherche en santé. Mais derrière une formulation très institutionnelle, il est surtout question d’IA clinique et de données de santé potentiellement utilisées, sauf opposition des utilisateurs.

❌
❌