Comment certains médias s'y prennent-ils pour détecter les bloqueurs de publicité ?
Et qu'ont fait les adblockers pour contourner ces mesures ?

Le , par Stéphane le calme, Chroniqueur Actualités
Les bloqueurs de publicité, qui étaient considérés comme une épine dans le pied des régies publicitaires, sont désormais considérés comme une menace pour plusieurs acteurs dans le domaine. Les réactions ont été diverses suite à leur popularité croissante parmi les internautes.

En octobre 2015, l’IAB (Interactive Advertising Bureau), qui représente les acteurs de la publicité en ligne, a reconnu que « nous nous sommes plantés ». Dans un communiqué, l’organisation s’est lancée dans une autocritique : elle a admis à quel point ses adhérents ont usé et abusé des publicités bloquantes, gênantes et ultra ciblées afin de s'assurer toujours plus de revenus. Aussi, dans l’optique d’éviter de se retrouver dans une impasse, l'IAB a lancé un programme de certification nommé LEAN (Light, Encrypted, Ad choice supported, Non-invasive ads), pour les publicités en ligne réservées aux formats qui sont « légers, chiffrés, qui donnent le choix à l’utilisateur et qui ne sont pas invasives ».

Certaines plateformes ont choisi de se lancer dans un jeu du chat et de la souris avec les bloqueurs de publicité : tandis qu’ils utilisaient des moyens pour détecter et priver d’accès à leurs contenus les utilisateurs qui se servaient d’un bloqueur de publicité, de leur côté, ces derniers cherchaient des moyens de contourner ce blocage. Cela a été par exemple le cas avec les quotidiens Business Insider et Forbes. Mais comment les plateformes s’y prenaient-elles pour détecter les bloqueurs de publicité ?

Pour ceux qui ont voulu lire un article sur le site Business Insider et avaient un bloqueur de publicité comme Adblock Plus, ils ont dû tomber sur un message leur indiquant que Business Insider est un média financé par la publicité et ils étaient alors invités à désactiver leur bloqueur de publicité ou à passer à un accès payant.


Business Insider se sert de piano.io de VX qui est décrit comme étant l’évolution du paywall, un système qui sert à bloquer tout ou partie de l'accès à un site web à l'aide d'un système de paiements. Sur le site, concernant la détection des bloqueurs de publicité, il est expliqué que l’implémentation actuelle pour détecter si un navigateur dispose d’un bloqueur de publicité activé ne dépend que de vous ; cependant, ce simple script va tenter de charger un fichier qui sera bloqué par la plupart des adblockers. Il va alors enregistrer un callback onerror qui va attribuer la valeur true. Par la suite, un callback onload va attribuer la valeur false à __adblocker .

Piano lit le cookie __adblocker sur le navigateur pour exécuter sa logique. Les règles de la façon dont Piano traite le cookie sont simples :

Si le cookie __adblocker n'existe pas, l'état adblocker sera enregistré comme non détecté ;
Si le cookie __adblocker est défini et est soit le booléen true soit la chaîne de caractères "true", l'état adblocker sera enregistré comme activé ;
Si le cookie __adblocker est vide et que le booléen est défini comme étant false ou alors s’il y a une chaîne de caractères différente de "true", l'état sera enregistré comme désactivé.

Code Javascript : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
<script>  
var setAdblockerCookie = function(adblocker) { 
    var d = new Date(); 
    d.setTime(d.getTime() + 60 * 60 * 24 * 30 * 1000); 
    document.cookie = "__adblocker=" + (adblocker ? "true" : "false") + "; expires=" + d.toUTCString() + "; path=/"; 
} 
var script = document.createElement("script"); 
script.setAttribute("async", true); 
script.setAttribute("src", "//www.npttech.com/advertising.js"); 
script.setAttribute("onerror", "setAdblockerCookie(true);"); 
script.setAttribute("onload", "setAdblockerCookie(false);"); 
document.getElementsByTagName("head")[0].appendChild(script); 
</script>

La solution de Piano s’appuie sur la bibliothèque open source FuckAdblock. Pour être plus précis, elle s’appuie sur une version alternative appelée BlockAdblock, « le même projet que FuckAdblock, mais avec un nom plus convenable ».

La page JavaScript du Business Insider cherche également à vérifier si le fichier FuckAdBlock js ne se charge pas, auquel cas elle détecte que l’utilisateur dispose d’un bloqueur de publicité activé.

La riposte ?

Les extensions Chrome ont la possibilité d'intercepter et de modifier les requêtes HTTP via l'API webRequest. Aussi, pour contourner cette détection, UBlock Origin intercepte la demande JavaScript de FuckAdBlock et répond avec un HTTP 307, le code d'une redirection temporaire. L'URL va rediriger vers un JavaScript encodé en base64 qui sera exécuté à la place de FuckAdblock.

Ce JavaScript alternatif va recréer une version fictive de FuckAdblock qui ne fait rien en réalité. De cette façon, si un fichier externe devait vérifier le statut de FuckAdblock, il verra que la bibliothèque s’est bel et bien chargée.

Mais FuckAdBlock a une réponse assez astucieuse au contournement d'uBlock. Il recommande l'utilisation de l'attribut d'intégrité pour la balise de script qui charge FuckAdBlock, ce qui fait que le navigateur n’arrive plus à charger la version de JavaScript encodée en base64 étant donné que les hash ne correspondent pas, ce qui va déclencher le callback onerror du script qui s’occupe de la détection. Business Insider n'a pas encore implémenté cette solution pour le moment.

Et du côté de Forbes, comment est-ce que c’est fait ?


Comme le Business Insider, Forbes s’appuie également sur une bibliothèque tierce pour détecter la présence d’un bloqueur de publicité : LiftDNA. Contrairement à Piano qui s’appuie sur une solution open source externe, LiftDNA a développé sa propre solution de détection.

LiftDNA et FuckAdblock présentent quelques similarités dans la façon d’effectuer les contrôles ; sur la page HTML de Forbes figure une chaîne codée en base 64 qui, sous sa forme décodée, contient des noms de classes CSS d’annonces facilement identifiables. Lorsque les bloqueurs de publicités voient ces éléments DOM avec ces noms de classes, ils les masquent immédiatement.

Du côté de Forbes, le contrôle est un peu plus complexe que chez Business Insider dans la mesure où il crée un élément div contenant entre 5 et 10 noms de classes choisis au hasard dans une grande liste, puis vérifie si l’attribut display prend la valeur none. De cette façon, il est plus difficile de créer des solutions de contournement car vous ne savez pas quelle classe ou quel style sera choisi. Si le code détecte que la balise div est masquée, alors l'utilisateur se sert d’un bloqueur d'annonce. Si ce n'est pas le cas, il définit un cookie et permet à l'utilisateur de continuer sa visite une fois qu’il a cliqué sur continuer. Voici la fonction qui permet de le réaliser :

Code Javascript : Sélectionner tout
1
2
3
4
5
checkBlockedClasses: function() { 
               for (var a, b = Math.random(), c = $(“.ads-container>div”), d = c.length, e = Math.floor(b * d), f =${classes!}!== fbs_settings.classes ? JSON.parse(base64.decode(fbs_settings.classes)) : [“dynamic-ads”], g = [], h = this, i = 0; i < 5 || Math.random() < .7 && i < 10; i++) g.push(f[Math.floor(Math.random() * f.length)]); 
               this.rand_classes = g, a = $(<div class=“’ + g.join(” “) + ’”>).append(<div style=“height: 1px;>), $(c[e]).before(a), window.navigator.userAgent.indexOf(“Firefox”) > -1 ? setTimeout(function() { 
                   a.height() || (h.triggered_by_classes = !0, h.triggerAdBlockState(!0)), a.remove() 
               }, 100) : (“none” === a.css(“display”) && (this.triggered_by_classes = !0, this.triggerAdBlockState(!0)), a.remove())

La riposte ?

Forbes a été en mesure de bloquer Adblock / Adblock Plus, mais UBlock Origin a réussi à forcer Forbes à croire que le bloqueur de publicité était désactivé. Comment ?

Fondamentalement, si l'URL ressemble à la page d'accueil des annonces Forbes, elle définit le cookie 'welcomeAd' comme étant true, et si uBlock peut déterminer l'URL d'un article à partir d'un cookie, alors il redirige automatiquement vers lui.

Source : Bug Replay, GitHub (UBlock Origin, solution de contournement du blocage de Forbes), Piano (script de détection d'un bloqueur de publicité), FuckAdblock, GitHub (BlockAdblock)

Voir aussi :

L'IAB fait un état des lieux de l'écosystème de la publicité et propose des solutions pour que les utilisateurs abandonnent les bloqueurs de pub


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de EliXirr EliXirr - Membre régulier https://www.developpez.com
le 07/12/2016 à 16:01
M'a bien fait rigoler ce poste merci ^^ Je retourne continuer mes scripts
Avatar de 23JFK 23JFK - Membre éprouvé https://www.developpez.com
le 07/12/2016 à 18:01
A la fin il y aura tellement de scripts de mesures/contremesures à charger pour pouvoir afficher une page que les sites ne seront plus accessibles qu'aux plus déterminés.
Avatar de gros_bidule gros_bidule - Membre du Club https://www.developpez.com
le 07/12/2016 à 20:55
A force de se faire insulter par des sites voulant imposer des pubs, les internautes cherchent leurs infos ailleurs, c'tout.
Les éditeurs de ces sites oublient un peu trop qu'ils ne sont pas uniques, ni indispensables.
Avatar de sitexw sitexw - Membre du Club https://www.developpez.com
le 07/12/2016 à 22:49
Je dois avouer que je ne m'attendais pas à voir mon script ici ! Et je découvre aussi avec le temps, quelle société l'utilise.

Pour donner quelques informations supplémentaires sur FuckAdBlock et BlockAdBlock, la V4 (actuellement en bêta) met en place des systèmes de détection additionnel sous forme de plugins. Pour, entre autre, détecter la tentative de corruption de la détection de UBlock Origin (et autres). Mais aussi, la détection HTTP (permet de contrer les blocage de nom de domaine, de régie publicitaire). Et par la suite, plein d'autres plugins (officiels ou non) pour une détection toujours plus adaptée a chaque cas.

Juste pour info, avant que vous me sautiez dessus, j'ai créé FuckAdBlock dans l'optique simple de détecter les bloqueurs publicitaires, point.
Après, chaque webmaster/développeur l'utilise à sa guise. Certains l'utiliseront simplement pour informer l'utilisateur des conséquences d'un bloqueur de publicité, quand d'autres l'utiliseront pour faire des statistiques et enfin, certains l'utiliseront pour bloquer le contenu.
Avatar de Iradrille Iradrille - Expert confirmé https://www.developpez.com
le 08/12/2016 à 5:41
Ça devient ridicule.

C'est similaire aux protections anti-piratages sur les softs : des utilisateurs avec une licence valide se tournent vers des versions crackées car la protection est top contraignante.
Bientôt ça sera pareil pour la pub.

En théorie, il n'y a aucun moyen de forcer l'affichage de la pub, vu que ça se passe coté client; c'est un combat perdu d'avance.

JS ne sert pas qu'a faire du CSS, ça sert aussi à faire chier les visiteurs. /troll
Avatar de coolspot coolspot - Membre confirmé https://www.developpez.com
le 08/12/2016 à 11:24
Ah c'est vraiment drole ces médias qui mettent tant d'énergie à vouloir imposer la pub à leur lecteur. Franchement si autant d'énergie et de rigueur était mis dans leur article ca éviterait que les médias actuel ne servent plus que de PQ tellement la propagande est grossière.

Bref ca se dit libre et indépendant mais pas indépendant vis à vis des annonceur et de la pub hein faut pas déconner non plus
Avatar de TiranusKBX TiranusKBX - Expert confirmé https://www.developpez.com
le 08/12/2016 à 12:25
C'est marrant avec Opéra et l'extension "AdBlocker Ultimate" je n'ai pas de blocage sur ces 2 sites
Avatar de chromiste chromiste - Nouveau Candidat au Club https://www.developpez.com
le 15/12/2016 à 5:41
... lorsque les esclaves se révoltent, les maîtres tremblent!, on retrouve les mêmes similitudes en politique et en biologie, trop tue même le peu.
Avatar de henryII henryII - Membre du Club https://www.developpez.com
le 15/12/2016 à 14:23
En tout cas, quand on voit l'efficacité de Ublock Origin sur la qualité du surf, on ne peut plus faire machine arrière et attendre bêtement que tous les serveurs de pub aient terminé de nous livrer leur chiasse :-)
Avatar de Michel Rotta Michel Rotta - Expert éminent https://www.developpez.com
le 03/01/2017 à 8:34
Deux choses me tarabustent dans cette "lutte" qui se déroule dans la mémoire de nos PC.

En effet, pour arriver à imposer de la publicité non bloquable, les éditeurs en arrivent à mettre en place des outils en charge d'espionner, à notre insu, la mémoire et les process de notre navigateur, à y introduire des scripts qui n'ont aucun rapport avec le contenu des sites, à faire transiter des données qui nous sont personnelles sans notre accord. Ne serions-nous pas, ici, dans le cadre d'une intrusion dans un système informatique répréhensible ?

Sans compter que c'est nous qui payons le trafic généré par ces différents échanges de données, y compris les publicités en vidéo qui, sur un forfait mobile, imputent notablement un forfait pour un apport utilisateur très discutable. Là aussi il faudrait réfléchir à une autorisation préalable de l'utilisateur pour consommer sa bande passante.
Contacter le responsable de la rubrique Accueil