Fake User Agent et indexation de page

Le User Agent en PHP est une variable récupérée par le serveur qui permet de déterminer le client (navigateur) HTML utilisé par un visiteur. Ce n’est pas une valeur de confiance mais dans la majorité des cas, l’utilisateur lambda ne va pas la modifier car il ne la connait même pas. Pour rappel, elle peut simplement être récupérée de cette façon :

echo $_SERVER['HTTP_USER_AGENT'];

Cependant, cette valeur peut être facilement modifiée en PHP, avec cURL par exemple. Vous pouvez y insérer un code HTML ou JavaScript pour récupérer des cookies (pas bien !). Le but de l’opération ici est d’indexer des liens que j’ai fait. Si vous êtes dans le SEO et que vous êtes amené à référencer un site internet, vous allez créer du lien sur des CP, des Wiki, des articles, des blogs, etc. Certains de ces liens vont moins bien s’indexer que d’autres. C’est le cas avec les Wiki ou les nouveaux sites Web 2.0 que vous montez pour vos clients. Si vous avez été dans cette situation, qu’avez-vous entrepris ?

Vous auriez par exemple pu :

  • pinger les pages comme un bourrin
  • linker les liens problématiques à partir de domaine plus trustés (bof)
  • utiliser des services comme Backlinksindexer pour vous mâcher le travail (payant)

La solution que je propose est d’utiliser la force du Fake User Agent pour poser un lien sur une centaine de sites et accélérer la phase d’indexation de vos liens.

Explication

Pour ce test, je n’ai voulu indexer qu’une page, mais vous pouvez tout autant utiliser une page qui contiendra tous les liens à indexer. Je vais utiliser le User Agent suivant :

Mozilla/5.0 <a href="http://jxi.fr">agence web haguenau</a> (Windows NT 5.1; U; en) Presto/2.10.229 Version/11.60

Ce n’est pas plus compliqué. Il contient mon lien, une ancre, le début et la fin d’un vrai UA. C’est suffisant.

La seconde étape va nécessité de trouver des spots qui loguent les User Agents. Pour ma part, j’ai utilisé ces footprints mais vous pouvez largement les varier pour trouver plus de sites :

"Mozilla/5.0 casino" site:.fr
"Mozilla/5.0 casino" site:.be
"Mozilla/5.0 casino" site:.ch
"Mozilla/5.0 casino" site:.lu
"Mozilla/5.0 casino" site:.info
"Mozilla/5.0 casino" site:.com
"Mozilla/5.0 casino" site:.net
"Mozilla/5.0 casino" site:.org
"Mozilla/5.0 casino" site:.eu
"Mozilla/5.0 casino" site:.biz

J’ai donc récupéré une centaine de domaines uniques. Je n’ai pas trié la liste. Ce n’est pas tres gourmand de passer sur tous les sites donc je ne m’en occupe pas trop.

Maintenant que vous avez votre User Agent et les domaines sur lesquels envoyer votre lien, il faut les envoyer ces liens. J’ai développé un petit script PHP qui va traiter toutes les urls trouvées dans l’étape précédente en multithreading (plus rapide) :

<?php
    function postUA($useragent, $referer)
    {
        $curl_arr = array();
        $master = curl_multi_init();
        $i = 0;

        $urls = file('urls.txt', FILE_IGNORE_NEW_LINES);

        foreach ($urls as $url) {
            $curl_arr[$i] = curl_init($url);
            curl_setopt($curl_arr[$i], CURLOPT_USERAGENT, $useragent);
            curl_setopt($curl_arr[$i], CURLOPT_FRESH_CONNECT, true);
            curl_setopt($curl_arr[$i], CURLOPT_CONNECTTIMEOUT, 10);
            curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl_arr[$i], CURLOPT_REFERER, $referer);
            curl_setopt($curl_arr[$i], CURLOPT_TIMEOUT, 10);

            curl_multi_add_handle($master, $curl_arr[$i]);
            $i++;
        }

        $previousActive = -1;
        $returnedOrder = array();
        do {
            curl_multi_exec($master, $running);
            if ($running !== $previousActive) {
                $info = curl_multi_info_read($master);
                if ($info['handle']) {
                    $returnedOrder[] = array_search($info['handle'], $curl_arr, true);
                    curl_multi_remove_handle($master, $info['handle']);
                    curl_close($curl_arr[end($returnedOrder)]);
                    ob_flush();
                    flush();
                }
            }
            $previousActive = $running;
        } while ($running > 0);

        curl_multi_close($master);

        return true;
    }

    postUA('Mozilla/5.0 <a href="http://jxi.fr">agence web haguenau</a> (Windows NT 5.1; U; en) Presto/2.10.229 Version/11.60', 'http://www.google.fr');

    echo "Job done.";
?>

Ok, et ça donne quoi ton truc alors ? Voici ce que vous pouvez trouver sur les domaines scrapés :

ua2

J’ai fait le test il y a 1 ou 2 jours. Voici ce que je trouve aujourd’hui sur Google avec le footprint Mozilla/5.0 agence web haguenau :

indexation

Mon lien est indexé. En espérant que Google suive le lien, ma page de destination sera également indexée tout comme les liens qu’elle contient. Cela génère même des clics (si si !) :

click-user-agent

Cette technique peut aussi être utilisée pour des techniques un peu plus border-line niveau légalité comme l’injection de lien par faille XSS.

Télécharger l’archive de mon projet de démo.

Le référencement à la limite de la légalité : cas pratiques
Technique de spamco : explication et script PHP

9 Comments on “Fake User Agent et indexation de page”

  1. C’est pas bête cette technique, il fallait y penser.
    Je sent que des listes de ce genre de plateforme qui recensent les user agents vont vite être scrapées :p

  2. Merci du partage pour cette technique que je ne connaissais pas. J’avoue que je pensais pas qu’il existe des sites qui indexe les UA…

    Il reste plus qu’à bidouiller un truc ou deux comme le mélange des UA et des faux liens à insérer…

  3. C’est diablement malin cette technique :) Jamais je n’aurais eu l’idée de faire ça, je suis tout le temps épaté par les gens comme toi qui arrivent à faire ce genre de chose. Je vais voir de mon côté ce que je peux faire avec ;)

  4. Excellent ! C’est une technique qui est des plus ingénieuses !!
    Merci de nous la partager et les bouts de codes aussi.

  5. Euu c’est déjà plus très net cette technique non ?! Il y a sans doute moyen d’avoir un retour de bâton rapide ou lors de la prochaine maj de l’ami Pingouin (qui d’après Matt fera très mal aux seo).
    A tester sur des sites qui ne risquent rien je pense !

  6. Merci pour la présentation de cette technique forte intéressante bien que quelque peu « borderline » ;).

    C’est à tester avec au moins quelques sites pas trop importants pour voir le résultat final. Maintenant, personnellement, je ne jouerai pas de cette technique pour un money site.

  7. C’est bon ça, je ne la connaissais pas celle la… Merci pour le partage et le bout de code. Par contre les liens ont une durée de vie limité, l’idée étant je suppose de faire un script s’exécutant régulièrement ;)

  8. Je n’ai pas tout compris, mais cela semble prometteur comme idée, a creuser et cela me donne quelques petites idées totalement border line… on en se refait pas je n’arrive pas à penser d’une autre manière ;)
    Sympa comme partage

Laisser un commentaire

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