Créer des exceptions pour Piwik dans uBlock Origin
J’ai déjà eu l’occasion de parler de Piwik, et de la raison pour laquelle il était bien plus respectueux de vos choix. Malheureusement au détour d’un des nombreux filtres d’ublock origin, existe une règle pour le bloquer purement et simplement. Si certains ont un contournement côté serveur, et c’est quelque chose que j’ai mis en place, il y a aussi une astuce côté client pour ceux qui veulent soutenir l’utilisation de Piwik sans cautionner d’autres pratiques. Un choix à la carte donc.
Rappel du fonctionnement de Piwik
La « prise de visite » prend deux formes sous Piwik : un code JavaScript qui permet d’obtenir beaucoup d’informations, et notamment sur le temps de lecture, et un autre sous la forme d’une « image » générée par un script PHP (en fait une image inivisible), qui permet d’enregistrer la visite à partir des données du navigateur, vu par le serveur ce coup-ci.
Pourquoi deux dispositifs ? Ceci afin d’assurer la bonne prise en compte de la visite si le navigateur est un dispositif dont le fonctionnement du JavaScript n’est pas bon, voire tout simplement désactivé. Dit comme ça, ça parait retors, mais il faut se souvenir que si vous avez correctement paramétré votre navigateur pour envoyer l’entête HTTP DNT, pour Do Not Track, qui veut littéralement dire « ne pas me tracer », Piwik vous ignorera car il respecte cette norme. Les autres trackers, mon cul.
Blocage sélectif
C’est sur le site de ma propre équipe, sur lequel on utilise Piwik, que j’ai découvert d’autres saloperies. Ni une ni deux, j’ai réactivé le bloqueur de pubs et j’ai cherché un moyen de whitelister Piwik, et seulement lui.
Pour être tout à fait honnête, c’est en partie grâce à l’interface du journal de blocage de Piwik que j’ai pu avancer sur la création des DEUX règles nécessaire au whitelistage de Piwik. On se rend donc dans le tableau de bord d’uBlock Origin (sisi, c’est le lien direct), et on peut ajouter ses propres règles. Donc pour le site www.clantoc.org, ça donne ça :
1 2 3 |
@@||piwik.clantoc.org/piwik.js$script,domain=www.clantoc.org @@||piwik.clantoc.org/piwik.php$image,domain=www.clantoc.org |
C’est la deuxième qui m’a posé le plus de problème. En effet, dans le journal de blocage, l’appel à piwik.php est assorti de pas mal de paramètres, qui changent évidemment à chaque affichage puisqu’il contient une donnée temporelle. Donc à chaque fois que j’ajoutais une règle, elle devenait aussitôt inefficace.
Décryptage : le @@|| permet de dire que l’on doit accepter le contenu et pas le bloquer, la première URL concerne le chemin vers les scripts Piwik, qu’on conseille de poser sur son propre domaine, avec très souvent une certaine paresse dans la définition de son propre domaine (et celui de ce blog ne fait pas exception). La mention $script ou $image permet de définir le type de contenu tel qu’il sera détecté par le navigateur (via les entêtes HTTP et les types MIME), et enfin le domain=… c’est le site sur lequel le filtre s’applique.
A adapter pour tous les sites ?
Je suis persuadé qu’il ne faut pas grand chose pour adapter cette règle pour qu’elle invalide celle passe-partout qui est présente dans les filtres de bases, à savoir débloquer Piwik pour tous les sites, et pas seulement un par un. Mais c’est avec un mélange de paresse et d’échecs dus à des essais infructueux (coucou les regex) que je vais vous demander si vous connaissez la solution et la partager dans les commentaires de ce billet.
Je pense que tu es parti dans le mauvais sens. Il vaut mieux rendre piwik compatible avec les blocker. Je suppose que tu utilises la liste Easyprivacy avec ton ublock. Il recherche le pattern /piwik dans les URL pour faire son blocage. Donc au lieu d’appeler la sonde classique, tu peux utiliser l’appel qui est dans le code de piwik, /js/index.php. Il sert un piwik.js minifié et surtout un peu caché. J’ai fais ça sur mon site et depuis mon tracker n’est plus bloqué par ublock. Il y a de la doc dans /js/README.md. Il y a aussi un doc… Lire la suite »
J’ai déjà eu l’occasion d’en discuter je pense, je ne sais plus où exactement, l’exemple du site de ma team est là pour montrer un cas concret. Il faut le voir d’un point de vue client uniquement. Pour tous les sites où je veux laisser passer Piwik, sans forcément me faire violer par la même occasion, c’est une piste à suivre.
Et puis je suis certain qu’il est possible de whitelister quelque soit le site. Pour l’instant dans l’immédiat j’ai fait au plus simple/rapide, même si ça ne marche que pour un seul site.
@Seboss666 un seul filtre @@/piwik.$image,script,~third-party,domain=clantoc.org
@PPmarcel Merci respecter la vie privée de vos visiteurs qui ont choisi de ne pas être pisté en installant Easyprivacy.
Eh bien le truc, c’est que Piwik respecte le DNT, donc même si on « contourne » le blocage mis en place sur la liste Easyprivacy, avec l’entête configuré, ça va bien, et Piwik n’enregistre pas (et c’est un entête HTTP, ça fonctionne donc partout). On a pas inventé ça pour rien, je préfère l’activer et que Piwik le respecte que de tout bloquer sans même se poser la question avant de la pertinence du blocage.
Sur un de mes sites, j’ai choisis l’option du htaccess qui va simplement rewrite l’url des fichiers Piwik.(js[php) :
RewriteRule ^stats/pwikpwik.php$ stats/piwik.php [PT]
RewriteRule ^stats/pwikpwik.js$ stats/piwik.js [PT]
Ainsi, tous les bloqueurs de publicité passent à côté.
Quant à l’option de privacy, elle est désactivable pour ignorer le DNT, donc de la à dire que Piwik respecte le DNT, c’est plutôt l’administrateur qui en est responsable http://img.imgland.net/7-Q86ik.png
D’accord pour le fait que l’option est à paramétrer pour l’admin. Mais comme c’est activé chez moi, je ne vois aucune raison de ne pas s’en servir, et pour ça, faut que le script ne soit pas bloqué. Et le .htaccess c’est bien, mais ça ne fonctionne que pour Apache, hors j’utilise Nginx depuis quelques années maintenant (pas tant que ça, deux ans) 😉
Effectivement, après avoir posté ce message j’ai lu tout ton blog (des tonnes d’articles intéressants), et j’ai vu que tu utilisais Nginx, autant pour moi 🙂