Blog

Déc 23

Bloquer le spam referrer

On appelle « Referrer » une page qui vous envoie des visiteurs. Quand vous cliquez sur un lien, votre navigateur envoie cette info parmi d’autres à la page sur laquelle vous vous rendez. Le spam referrer est une technique de SEO « black hat » visant à incruster un faux referrer à une requête HTTP. Elle a plusieurs objectifs, dont celui de pourrir vos stats de visites pour vous inciter à aller voir d’où viennent les visiteurs, ou d’acquérir des backlinksdepuis des pages qui afficheraient des statistiques sur les visites de votre site (ex: AWStats). Le mini-arsenal pour réaliser ça est à la portée de tout un chacun, de libcurl à CasperJS.

Même si cette technique est vieille comme le monde, je constate depuis quelques jours/semaines qu’elle nous fait une deuxième jeunesse (Semalt, et bien d’autres). La semaine dernière encore, j’ai mis un site de quelques pages en ligne. Après l’avoir fait indexer, ses premières visites ont été des spam referrer. Le site avait moins d’une heure de vie et encore quasiment aucune visibilité.

On est bien d’accord: être victime de referrer spam, ça ne pose aucun souci de sécurité, et ça n’a même souvent aucun effet particulier pour vous. Cependant, les robots de spam qui squattent votre serveur, ainsi que (peut-être) les sites vers lesquels vous faites des liens, peuvent provoquer des retombées.

Je sais pas vous, mais j’ai décidé de nettoyer tout çà. L’idée consiste à lire le Referrer d’une requête le plus tôt possible, et à lui interdire d’accéder au contenu. On va voir comment le faire avec Apache, Nginx, et en PHP. Le souci, c’est qu’il n’existe pas une liste exhaustive des spammers. Il faudra donc y revenir à chaque fournée pour ajouter les nouveaux.

Anti-Spam Referrer Apache

Dans un fichier .htaccess ou les fichiers de configuration Apache :

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^http://semalt.semalt.com [NC]
RewriteRule ^.* http://semalt.semalt.com [L,E=nolog:1]

Le flag E=nolog sert à marquer ces lignes pour les ignorer ensuite dans les logs grâce à la directive :

CustomLog access_log combined env=!nolog

Anti-Spam Referrer Nginx

Dans la directive server {} d’un fichier de configuration Nginx :

if ($http_referer ~* (semalt\.semalt\.com) ) {
    return 405;
}
# en bloquer plusieurs d'un coup :
if ($http_referer ~* (spammer1|spammer2|spammer3) ) {
    return 405;
}

Anti-Spam Referrer en PHP

$spammers = ['semalt.semalt.com', 'spammer2', 'spammer3'];
if (isset($_SERVER['HTTP_REFERER']) && !empty($_SERVER['HTTP_REFERER'])) {
    $ref = $_SERVER['HTTP_REFERER'];
 
    foreach($spammers as $spammer) {
        if (strpos($ref, $spammer) !== false) {
            header("HTTP/1.0 405 Method Not Allowed");
            die();
        }
    }
}

Le cas Semalt

J’ai dit au début de l’article que l’arsenal du referrer spam était à la portée de tout un chacun. C’est vrai, mais Semalt est quand même un bon cran au-dessus: leur botnet comporterait 300.000 machines et leur spam toucherait 40 % des sites. Si ça vous intéresse, je vous recommande l’article/enquête (en anglais) de Incapsula, dont est aussi tirée l’image d’illustration de cet article.

About The Author

Leave a reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *