Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Contournement des AdBlockers pour Matomo et Sentry #653

Open
FJEANNOT opened this issue Oct 8, 2024 · 13 comments
Open

Contournement des AdBlockers pour Matomo et Sentry #653

FJEANNOT opened this issue Oct 8, 2024 · 13 comments
Assignees
Labels
discuss a discuter 👷‍♂️ SRE Issue opened by SRE team

Comments

@FJEANNOT
Copy link

FJEANNOT commented Oct 8, 2024

Problématique

Les scripts d'intégration Matomo et Sentry sont bloqués par les adblockers. (Adblock, uBlock, etc...)
Trouver une solution pour contourner ce blocage afin de faire remonter le plus d'analytics possible

@FJEANNOT FJEANNOT added 👷‍♂️ SRE Issue opened by SRE team discuss a discuter labels Oct 8, 2024
@FJEANNOT
Copy link
Author

FJEANNOT commented Oct 8, 2024

Après investigation, voici mes conclustions:

Matomo

Le blocage de Matomo provient de plusieurs facteurs:

  • L'apparition des mots clés "matomo" et "piwik" dans les urls
  • La détection de QueryParams faits par le bloqueur qui permet de détecter le script Piwik.
  • L'utilisation de certains paramètres au sein de requêtes GET (à vérifier)

Ressources:

Il existe deux approches pour pallier au problème.

  • Faire des modifications directement sur Matomo pour offusquer les paramètres, la méthode et le hostname.
  • Déployer un serveur intermédiaire qui prendra des paramètres offusqués et transfèrera les analytics au Matomo

Dans les deux cas, il faudra modifier le script d'intégration côté client.

Dans l'immédiat -> prendre contact avec Empreinte Digitale qui gère le Matomo pour leur soumettre le problème et voir ce qu'ils peuvent faire de leur côté.

Sentry

Sentry est de son côté bloqué pour les raisons suivantes:

  • Potentiellement (en fonction du bloqueur et de sa version) l'apparition de "sentry" dans les url
  • La détection du QueryParam sentry_key

Ressources:

Possibilités:

  • Voire avec ED si c'est possible de changer le nom du paramètre
  • Déployer un serveur intermédiaire qui va offusquer le paramètre sentry_key et le relayer à sentry.

Problématique

Quoi que l'on fasse, on risque de s'embarquer dans le jeu du chat et de la souris avec les filtres de détection adblock, et il faut s'attendre à devoir réadapter le fonctionnement choisi un jour ou l'autre.

@FJEANNOT FJEANNOT self-assigned this Oct 9, 2024
@FJEANNOT
Copy link
Author

@FJEANNOT
Copy link
Author

@FJEANNOT
Copy link
Author

Vu avec Valentin de Empreinte Digitale: il vont étudier la question de leur côté et tenter d'appliquer une solution directement sur le Matomo, en modifiant du code backend et le script d'intégration

@maxgfr
Copy link
Member

maxgfr commented Oct 10, 2024

Je suis tombé sur ça : https://github.com/mjisoton/matomo-bypass-adblock et ça https://github.com/0x11DFE/Matomo-Anti-Adblock

Les deux parlent des méthodes pour bypasser le blocage par adblock

@maxgfr
Copy link
Member

maxgfr commented Oct 10, 2024

Mais oui, il y a des soucis à deux niveaux :

  • du domaine et des mots clés utilisés matomo, piwik
  • des paramètres par défaut passés en GET

@FJEANNOT
Copy link
Author

Oui on partirait sur une méthode qui va permettre l'offuscation en apportant des modification à la fois sur les serveur matomo et dans les scripts d'intégration: https://github.com/simonfrey/matomo_circumvent_adblock

@chewam
Copy link

chewam commented Oct 11, 2024

Proposition:

  • modifier la librairie matomo-next pour y ajouter:
    • La capacité d'utiliser une route locale à l'application pour envoyer les events Matomo
    • La capacité de transformer les params de la requete GET à Matomo (base64, chiffrement symétrique)
    • La capacité de reconstruire l'appel original vers Matomo via une fonction que l'on peut appeler backend side
  • ajouter une route d'API dans l'application (ex: CDTN), qui va utiliser la fonction de matomo-next pour reconstruire et émettre l'appel à Matomo.

@m-maillot
Copy link

Il faut aussi que l'on regarde le pourcentage d'utilisateur utilisant des adblock (on a 50% de traffic en mobile et 50% en desktop)

@gary-van-woerkens
Copy link
Contributor

J'ai fait un petit test en modifiant légèrement l'implémentation de la lib matomo-next.

  • Lorsqu'on est bloqué:
    Image

  • Lorsqu'on change l'url de base de Matomo:
    Image

Il me semble que les paramètres ne posent pas de problème a partir du moment ou l'url ne contient pas de référence explicite à Matomo.

La config de matomo-next de mon test dans NextJS:

const config = {
    siteId: "24",
    url: "/api/fab",
    jsTrackerFile: "/get-script",
    phpTrackerFile: "/send-event"
  };

La route get-script:

export async function GET() {
  try {
    const response = await fetch('https://matomo.fabrique.social.gouv.fr/matomo.js');
    
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    
    const content = await response.text();

    return new Response(content, {
      status: 200,
      headers: {
        "Content-Type": "application/javascript"
      }
    });
  } catch (error) {
    console.error('Erreur lors de la récupération du fichier Matomo:', error);
    return new Response('Erreur lors de la récupération du fichier Matomo', {
      status: 500
    })
  }
}

La route send-event:

export async function POST() {
  // let's push the event to Matomo...

  return new Response('Ad Block has been bypassed!', {
    status: 200,
  })
}

@igorrenquin
Copy link
Contributor

@FJEANNOT demander la solution envisagé par ED, timing pour ensuite prise de décision de notre côté.

@gary-van-woerkens
Copy link
Contributor

@maxgfr Ca reste un sujet à traiter ou on peut close l'issue ?

@gary-van-woerkens gary-van-woerkens self-assigned this Nov 14, 2024
@maxgfr
Copy link
Member

maxgfr commented Nov 15, 2024

Toujours d'actualité, mais le ticket n'est pas prio (cc @m-maillot @carolineBda)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
discuss a discuter 👷‍♂️ SRE Issue opened by SRE team
Projects
None yet
Development

No branches or pull requests

6 participants