Un script Php pour lutter contre le spam referer

Vous avez sans doute vu dans vos statistiques Google Analytics de votre site internet qu'elles étaient polluées par des referers de type spam. Cela rend moins exploitable vos statistiques, cela fausse les données, ... C'est vraiment dérangeant.

J'ai donc eu l'idée de développer en Php un script qui permet de bloquer le spam referer. C'est une bonne nouvelle non ? ;-). Oui enfin je vous annonce tout de suite que ce script n'est pas la solution parfaite car il ne peut en avoir une à partir d'un script coté serveur.

Une solution qui n'est pas parfaite

J'ai mis en place le script sur mon site. Si je regarde mes statistiques visiteurs, free-social-buttons.com apparaît toujours dans les rapports :

  • www1.free-social-buttons.com 8 visiteurs
  • www2.free-social-buttons.com 4 visiteurs
  • www4.free-social-buttons.com 2 visiteurs
  • www5.free-social-buttons.com 2 visiteurs

Stats spammers referents

Comment cela ce fait ? J'ai réfléchi un moment avant de trouver pourtant la raison est toute simple. Cela vient du fait qu'il y a un appel direct au script Google Analytics et non à une page de mon site. Le script ne sera donc pas executé... Il faut donc (aussi) utiliser d'autres solutions expliquées dans cet article

Le principe du script

Le script permet de bloquer les spammers à la source cad lors de l'appel de n'importe quelle page du site. Lors de l'appel à une page du site si un spammer de type referer est détecté le script stoppe l'exécution du code PHP (avec un die()) et par conséquent le spammer n'apparaîtra pas dans les stats.

Plus en détails

Le script détecte le domaine du référent. Ensuite il compare ce référent avec une liste de domaines de type "spammers". La liste des domaines est présente dans une table SQL. Si le domaine est connu c'est donc un spammer alors j'incrémente de 1 le compteur correspondant au domaine concerné (champ visits). Ensuite je bloque l'exécution du code php et une page blanche s'affiche. Si le domaine est inconnu la page s'affiche.

En image le contenu de la table spammers :

Table spammers

Les avantages du script

  • Il permet d'économiser des ressources du serveur d'hébergement puisque le code (coté serveur) n'est pas exécuté lorsqu'un spammer se présente.
  • Vos statistiques visiteurs seront moins polluées puisque certains spammers seront bloqués et la page du site ne sera pas affichée. Le script JS de votre module de statistiques ne sera donc pas exécuté.
  • On peut ajouter facilement en base de données (via PhpMyAdmin) un domaine. Je vais améliorer le script coté backoffice afin que l'on puisse ajouter une liste de domaine à bloquer via un fichier texte ou csv.
  • Le script fonctionne (normalement) sur un hébergement mutualisé.

Les inconvénients du script

  • Comme n'importe quel script il demande un petit temps de traitement pour tester le referer. Cela ralentira l'affichage pour les visiteurs légitimes. Ceci dit j'ai testé la perte de performances d'affichage d'une page liée à ce script : c'est de l'ordre du centième de seconde donc on peut dire que ce n'est vraiment pas grand chose.

  • Vous remarquerez sur le screenshot au dessus (table des spammers) que certains domaines ont toujours comme valeur 0 sur le champ "visits" alors que d'autres ont été bloqués plus de 10 fois. Cela veut dire 2 choses :

  1. Pour certains de ces domaines il n'y a pas eu de tentatives de spam donc là c'est normal.
  2. Pour certains d'entre eux comme free-social-buttons.com mon filtre n'a pas fonctionné pourtant le domaine apparaît bien dans mes stats de Google Analytics. On en revient au problème évoqué plus haut. Le script n'est pas exécuté dans certains cas.

Donc ? Le script est-il vraiment utile ?

Oui car même si le script ne peut rien faire contre ces appels directs au fichier JS de Google Analytics il peut par contre bloquer certains spammers à la source avec les avantages que cela représente.

Je mettrai à disposition prochainement mon script sur GitHub.

Ajoutez votre commentaire

(*) = champs obligatoires

Les commentaires

Aucun commentaire