Résumé : état des lieux du flicage sur le web et réflexion : jusqu'où aller pour limiter son flicage web ? Bloquer la pub et les traqueurs / pisteurs ? Facile avec uBlock Origin. Ne pas laisser son navigateur communiquer à des tiers la page web précise sur laquelle on se trouve (tel article de journal, tel profil sur un site web de rencontres, etc.) ? Facile avec Smart Referer (mais il y a des fuites malgré tout). Éviter le téléchargement automatique d'une partie des contenus tiers auprès des géants du web ? Facile avec LocalCDN (qui remplace la défectueuse Decentraleyes), mais le trou dans la raquette est énorme. Bloquer tous les scripts et les frames / inclusions externes sur un site web ? Faisable avec uBlock Origin (encore faut-il le savoir) ou uMatrix, mais c'est chiant et il faut s'impliquer lourdement (débloquer des contenus externes sur nos sites favoris). Bloquer tous les contenus tiers et autoriser les indispensables site web par site web ? Faisable avec uBlock Origin ou uMatrix, mais c'est totalement invivable, même quand on est motivé. La guerre technique étant asymétriquement en notre défaveur, je pense que le retrait des contenus tiers de nos sites web favoris passe par le dialogue. Contacter l'éditeur du site web. Dialoguer avec nos collègues développeurs web / administrateurs systèmes afin de les informer des conséquences de leur choix / travail de piètre qualité. Ça ne fera pas tout (genre sur les sites web internationaux), mais ça sera déjà ça.
Ce shaarli s'adresse à un public avancé. J'entends par là des personnes qui ont l'envie et le temps de comprendre et qui acceptent le risque de rendre leur navigation web plus ou moins invivable (je préciserai à chaque étape et un retour en arrière facile est toujours possible).
Si tu ne te reconnais pas, dans leur configuration par défaut, les extensions pour Mozilla Firefox uBlock Origin et Smart Referer fonctionnent très bien sans déranger l'utilisateur. Elles sont déjà une bonne base pour défendre ta vie privée. Tu peux y adjoindre Privacy Badger et LocalCDN. Le gain n'est pas flagrant, mais la probabilité d'emmerdements est très faible.
Commençons par un rappel.
Le contenu d'un site web se décompose en plein de morceaux (texte, images, mise en forme, police de caractères, etc.). Chaque morceau peut être stocké (et diffusé) indépendamment des autres.
La problématique à l'origine de ma réflexion est la suivante : je veux que des contenus provenant de « youtube.com » soient chargés automatiquement lorsque que je vais sur Youtube de ma propre initiative, mais qu'ils ne soient pas chargés quand je suis sur un autre site web, comme celui du journal Fakir ou celui de la mairie de mon bled ou mon espace personnel sur le site web de ma banque.
L'objectif principal est de préserver ma vie privée : je ne veux pas que Google Youtube sache que j'ai consulté le site web de Fakir ou celui de ma mairie ou celui de ma banque. Or c'est possible avec le nom du contenu (une liste de lecture « Fakir TV », ça se voit) et/ou avec le Referer, entre autres. J'ai expliqué ce qu'est le Referer et les problèmes de vie privée que cela pose dans un article récent.
L'objectif secondaire est d'arrêter de charger des contenus qui ne m'intéressent pas afin d'économiser des ressources et de gagner du temps. Tous les sites web modernes sont des merdes qui mettent plusieurs secondes à se charger pour un contenu réel environ nul (en proportion).
Ublock Origin, uMatrix et NoScript sont quelques extensions Firefox qui permettent de filtrer la merde des sites web. La publicité, par exemple, mais aussi les traqueurs / pisteurs / profileurs (qui cherchent à collecter le plus d'informations possible), les outils de mesure d'audience, et plein d'autres éléments souvent invisibles.
Voyons le fonctionnement principal de chaque outil dans sa configuration par défaut :
Chaque outil a des fonctionnalités secondaires qui lui sont propres. NoScript protège contre le vol de clic et les attaques XSS basiques. uMatrix peut masquer le Referer. uBlock et uMatrix bloquent certaines indiscrétions supplémentaires comme la fuite d'adresses IP locales en webRTC ou la surveillance des liens (attribut « ping » de la balise XHTML « a »).
On va donc obtenir un résultat différent avec chaque extension. Si je reprends mon exemple de Youtube sur le site web du journal Fakir / mairie / banque : uBlock le laissera passer car il n'apparaît pas dans une liste de filtrage, uMatrix ne le laissera pas passer car il s'agit d'une inclusion, et NoScript le laissera passer car il s'agit d'une inclusion et que Youtube apparaît dans la liste blanche (comme la plupart de l'empire Google).
Par défaut, si l'on bloque / débloque un contenu avec uBlock Origin ou NoScript, même temporairement, ça vaut pour tous les sites web (et tous les onglets). Avec uMatrix, par défaut, l'autorisation vaut pour le site en cours (j'autorise youtube.com sur le site web de Fakir et uniquement sur ce site web). Avec sa configuration par défaut, uMatrix répond mieux au fil rouge de cette réflexion.
Sans surprise, un même type d'élements peut être bloqué par défaut par plusieurs de ces extensions, mais pas toujours. Exemple : les scripts sont bloqués par NoScript (sauf ceux de la liste blanche) et par uMatrix (sauf ceux du domaine de la page web consultée).
Évidemment, il y a des équivalences.
À ce stade, les inclusions et les scripts tiers sont bloqués par au moins l'une de ces extensions. uMatrix étant celle qui va le plus loin par défaut et uBlock Origin le moins loin (pour moi, c'est parfaitement normal, son travail réside ailleurs).
À ce stade, la navigation web peut commencer à devenir pénible car il faut autoriser les scripts et les inclusions tiers sur nos sites web favoris. Mais une fois que c'est fait, normalement c'est OK, ça change peu. C'est donc un bon compromis vie privée / confort, je trouve.
Et si l'on allait plus loin ?
Sur tout site web moderne, le style CSS est récupéré depuis BootstrapCDN, la police de caractères depuis Google et les scripts JavaScript depuis CloudFlare (ce sont des exemples). Tout ça laisse des traces chez les quelques géants du web qui leur permettent de tracer un internaute entre les sites web qu'ils consultent (car ces acteurs sont utilisés partout) et à l'intérieur d'un site web (untel a lu tel et tel article).
Peut-on bloquer tout ça ? Peut-on bloquer ces contenus tiers ?
Depuis plus de quatre ans, j'utilisais l'extension Firefox Decentraleyes. Elle détecte l'utilisation de scripts bien connus et, plutôt que de les faire télécharger par le navigateur web, elle les injecte elle-même dans la page. Dit autrement : cette extension embarque les scripts bien connus et les remplace sur les sites web consultés. Ainsi, le fonctionnement du site web est identique, mais rien a été téléchargé depuis le site web du géant du web.
Depuis plus d'un an, je constate qu'elle est inefficace. À part pour remplacer un jquery téléchargé chez Google, elle est incapable d'agir pour un script téléchargé depuis jsdelivr.net, MaxCDN, jquery.com (!!!), cdnjs.com et autres. J'ai pourtant la dernière version, la 2.0.14 qui est sortie il y a deux semaines.
LocalCDN est une extension Firefox dérivée de Decentraleyes. D'après mes tests, tout ce que j'ai mentionné au point précédent est substitué par une version locale sauf jsdelivr.net. C'est déjà beaucoup mieux. C'est du logiciel libre. Je n'ai pas encore assez de recul afin de dire si ça ne fait pas fuiter des choses en douce et si ça casse rien.
Je ne crois pas trop à ce type de solution pourtant très simple d'utilisation : seuls quelques rares contenus tiers sont pris en charge, donc il reste beaucoup de fuites, et, surtout, la version des scripts change tellement souvent que je suis certain que l'extension est inutile sur les sites web qui suivent les versions, son temps de mise à jour étant plus long que le délai moyen d'apparition d'une nouvelle version d'un script voire celle d'un nouveau script à la mode.
On peut bloquer tous les contenus tiers d'un site web donné avec uBlock Origin. En appliquant la méthode ci-dessus (premier point de la liste « il y a des équivalences ») à l'intersection entre la ligne « Tierce-partie » et la colonne de gauche. Comme avant, il sera possible de débloquer des contenus domaine par domaine sur chaque site web en cliquant sur la couleur verte dans l'intersection entre un domaine et la colonne de droite. L'autorisation est descendante / récursive : autoriser un domaine autorise ses sous-domaines. C'est pratique avec les CDN, ça permet d'autoriser toutes les instances présentes et futures d'un seul coup. Mais, en cas de vol d'un nom ou d'une attaque, du contenu pourra être injecté sur le site web que tu consultes, d'où ne pas autoriser les scripts sur tout un domaine et ses sous-domaines peut être une bonne idée. Aucun problème pour CSS, médias, etc.
Je vois deux limites :
Ben, utilisons uMatrix, alors. Sa présentation matricielle nous permet de voir les types de contenus et les domaines et de bloquer / autoriser tel type de contenu (cliquer sur l'entête des colonnes), tel domaine (cliquer sur l'entête d'une ligne) ou tel type de contenu provenant de tel domaine (cliquer sur l'intersection) pour chaque site web.
Je vois deux limites.
La première est que, par défaut, uMatrix n'a pas les mêmes listes de filtrage qu'Ublock Origin, donc il laisse passer des traqueurs / pisteurs bloqués par uBlock. On peut obtenir le même comportement que celui d'uBlock en important toutes les listes de filtres dans les paramètres (onglet « Ressources ») ainsi qu'en bloquant les styles CSS (et les polices de caractères) et les images tierces. Pour ce faire, il faut cliquer sur l'icône d'uMatrix dans la barre d'outils, passer en vue globale en cliquant sur « * » (en haut, à gauche) puis cliquer sur l'entête de la colonne CSS et celui de la colonne images. Cadenas pour sauvegarder. « * » pour revenir à la vue locale. On pourra débloquer des contenus (images, CSS, police de caractères, médias, etc.) au cas par cas, site web par site web et domaine par domaine comme on l'a vu ci-dessus.
La deuxième limite d'uMatrix est qu'il ne bloque pas encore les traqueurs / pisteurs déguisés. Qu'est-ce ? Au début de ce shaarli, j'ai écrit que certains contenus tiers sont camouflés comme contenu interne au site, comme « medias.liberation.fr » qui se nomme en réalité « medias.liberation.fr.wtxcdn.com ». (Évidemment, comme l'explique l'article pointé, cela diminue le niveau de sécurité face à un contenu injecté…) Il en va de même pour les traqueurs / pisteurs. Regardons le script dont le domaine est « f7ds.liberation.fr ». Son vrai nom est en réalité « atc.eulerian.net. ». Eulerian est une société commerciale qui exerce dans le marketing. Le script est un traqueur / pisteur. Le fait qu'une liste de filtrage bloque le domaine « eulerian.net » sera inefficace puisque cette ressource se nomme « f7ds.liberation.fr ». Depuis février 2020, uBlock Origin prend en compte le nom final, mais pas la version d'uMatrix publiée sur addons.mozilla.fr (la version beta disponible dans le dépôt git le fait). Donc, pour l'instant, si l'on utilise seulement uMatrix, on perd en qualité de blocage de la vraie merde (les traqueurs / pisteurs), ce qui est un mauvais choix, à mon avis : mieux vaut filtrer le plus offensif, donc les atteintes à la vie privée certifiées.
Notons qu'on peut utiliser uBlock Origin pour le blocage et uMatrix pour la visibilité sur les contenus. Le meilleur des deux mondes. Pour cela, on peut désactiver toutes les listes de filtrage d'uMatrix. Comme ça, pas de doublon sur ce périmètre-là, donc gain de temps lors de l'analyse d'une page web. On peut également désactiver les autres protections d'uMatrix afin d'être sûr de tout centraliser dans uBlock, ce qui facilite le diagnostic d'un sur-blocage / comportement étrange. Ça sert à rien à moyen terme puisque uMatrix aura le même comportement qu'uBlock Origin.
Alors utilisons uBlock Origin en bloquant tout contenu tiers et en acceptant de perdre en visibilité sur le type de contenu bloqué (script, CSS, etc.). Ce n'est pas si simple…
Si le véritable nom qui héberge les images et/ou le CSS est en dehors du domaine (statics.liberation.fr = statics.liberation.fr.wtxcdn.com, par exemple), alors le contenu sera bloqué. Même chose si le HTML est en dehors du domaine (exemple : www.gouvernement.fr = sni.www.gouvernement.fr.c.footprint.net) : toute la mise en forme saute.
Ça se passe comme ça sur pleeeeiiiin de sites web. La navigation web devient l'enfer sur terre. Vraiment. Même pour quelqu'un de motivé.
Et ça ne va pas s'arranger. Regarde le nom suivant : www.francebleu.fr = a3d5db99c4f9f11e9bd370659f4f1e30-375828590.eu-west-3.elb.amazonaws.com. Cela identifie une instance chez Amazon AWS. T'es pas sûr de tomber sur la même instance lors de ta prochaine visite. En clair : il faudra peut-être débloquer à nouveau encore et encore France Bleu dans uBlock. C'est chiant et ça encombre la liste des règles d'uBlock Origin, ce qui va nécessairement le ralentir. Perdu.
Tu noteras que ce problème surviendra aussi avec uMatrix dès lors que la version publiée sur addons.mozilla.org bloquera aussi le nom final plutôt que le nom de façade.
Dit autrement : il va devenir très compliqué de bloquer les contenus tiers.
Au moins, ça permet de se rendre compte qu'on a vraiment merdé, que le web est devenu n'importe quoi. Mais vraiment. Tu veux aller peinard sur le site web de ton gouvernement ? Tu atterris chez un opérateur de communication États-Unien (footprint.net = Level 3). Tu veux aller sur le site web de ta radio ? Tu atterris chez Amazon. Le site web de ton journal ? Vlam le traqueur déguisé. C'est sans compter sur tous les acteurs qui seront informés lorsque ton navigateur récupérera CSS, images, police de caractères, scripts, vidéo, carte géographique, etc. d'un banal site web. J'apprécie aussi beaucoup les styles CSS et les polices de caractères qui sont chargés depuis des hébergeurs externes sans être utilisés sur le site web… … …
On pourrait demander à l'auteur d'uBlock Origin / uMatrix de ne pas considérer la page web comme du contenu tiers. Si l'utilisateur a désiré consulter tel site web, peu importe que la page web soit hébergée hors de son domaine. Afficher la page en bloquant tout le reste, c'est déjà informer le prestataire choisi par le site web (Amazon pour France Bleu et Level 3 pour le site du gouvernement). Même raisonnement pour les images et le CSS : si l'hébergeur / le nom final est le même que pour la page web, on peut laisser passer. J'imagine cependant que ce leste permettra des contournements malveillants.
Bref, bloquer les contenus tiers sur les sites web est une stratégie invivable, même pour quelqu'un de motivé.
C'est pour ça qu'il faut mettre la pression sur les éditeurs des sites web qu'on apprécie afin qu'ils internalisent les ressources (images, styles, polices de caractères) utilisées sur leur site web. C'est pour ça que j'ai écrit aux journaux que j'apprécie, par exemple. J'ai aucun doute : ça servira à rien, mais ça permet de prendre date, de dire « à partir de telle date, vous n'ignoriez plus la problématique, donc vous êtes responsable. Vous saviez et vous n'avez rien fait ».
Il faut également former les développeurs web et les administrateurs systèmes. Les premiers afin qu'ils apprennent à utiliser le framework qu'ils utilisent et qui permet d'internaliser en un clic les ressources (comme les traqueurs dans les applications mobiles qui sont activés par défaut par incompétence). Les seconds afin qu'ils apprennent à faire de la montée en charge sans recourir à des prestataires qui deviennent de plus en plus hégémoniques.
Ne vais-je pas trop loin ? Est-il vraiment utile de bloquer les contenus tiers des sites web ?
Après tout :
Alors, oui, il n'y a pas que le Referer qui informe les géants de nos lectures précises sur le web, d'autres entêtes HTTP le font (par exemple : « Origin: » pour Ajax / XMLHttpRequest, la récupération d'une police de caractère, et d'autres usages). Mais comme on bloque ces contenus (polices et scripts) avec Firefox et uMatrix / uBlock Origin aux 4e et 5e points, ça n'a pas d'importance.
Le nom du contenu est parfois bien suffisant pour identifier le contexte (quand ton navigateur demande la liste de lecture « Fakir TV » à Youtube sans rien demander au préalable, c'est qu'il est sur le site web de Fakir.
Les hébergeurs des contenus externes / tiers restants (CSS, JS, images) déposent rarement des cookies. Petite digression : on peut bloquer tous les cookies avec uMatrix et les autoriser au cas par cas pour chaque site web en utilisant la mécanique vue et revue tout au long de ce shaarli. Cela permet de remplacer l'extension Firefox Cookie Monster morte lors du changement de format des extensions et de pallier à l'absence de visibilité à laquelle nous confronte Firefox (comment sais-je que tel site web qui ne s'affiche plus a besoin de cookies ? pour quel domaine ?).
Donc, au final, faut-il se rendre la navigation web invivable pour ces contenus tiers restants ? Je n'en suis pas convaincu. On peut s'arrêter aux mesures mentionnées dans la liste de 6 points ci-dessus si l'on est motivé ou juste installer les extensions Firefox uBlock Origin, Smart-Referer (et éventuellement LocalCDN) si l'on ne veut pas se prendre la tête.
En revanche, ce dont je suis sûr, c'est qu'il faut agir à la racine du problème, c'est-à-dire du côté des sites web. Ne pas hésiter à contacter l'éditeur des sites web que t'apprécie pour lui demander de dégager un maximum de contenus tiers. Ce sont eux les responsables. Si ça peut inspirer, voici ce que j'ai écrit aux journaux que j'apprécie. De même, ne pas hésiter à sensibiliser les développeurs web dans nos taffs respectifs. : internaliser style CSS, scripts JavaScript, polices de caractères, etc., c'est ni compliqué ni chronophage. Si un échange humain ne prend pas et que tu es administrateur système, tu peux aussi déployer l'entête HTTP Referrer-Policy. Bien que ça laisse un trou conséquent dans la raquette, ça sera déjà ça de pris à moindre effort.