Mon script anti-aspirateur a blacklisté googlebot

WRInaute discret
salut a tous,
j'utilise actuellement un script anti aspirateur de sites qui bride à 60 pages/minutes chaque IP;
Tout s'est bien passé depuis environ 3 mois, mais le 1er avril (poisson? malheuresement non!) googlebot a déoassé ce quotat et je viens de m'en rendre compte uniquement maintenant.
J'ai passé la limite à 90, mais est-ce que le fait que google ai crawlé pendant 7 jours la même pages peut-il me pénaliser pendant longtemps?
Merci d'avance de vos réponses et de vos avis

doom
 
Nouveau WRInaute
tu ne peux pas exclure telle ou telle ip dans ton script afin de laisser google et autre bot vérifier ton site ?

je ne connais pas ton site, donc sauf si cela n'est constitué que de texte, 60 pages par minutes cela me semble assez important pour les aspirateur perso en tout cas.
 
WRInaute accro
Bonjour

Google donne une méthode pour détecter les bots.

Dans cette fonction, le paramètre $ip a déjà été validé ip4 ou ip6 normé, et la méthode est de comparer le ndd du reverse à : googlebot.com ou google.com ou googleusercontent.com, et dans ce cas de vérifier si la correspondance vers l'ip est la même ip.

Sinon ce n'est pas un bot google, donc recherche sur regex.

On pourrait compléter par d'autres méthodes similaires pour d'autres types de bots.

1) La méthode ( pour Google ) est-elle correcte et exhaustive ?

2) Quelles méthodes pour d'autres bots ?

Merci beaucoup de corriger mon script.

Amicalement.


PHP:
<?php

    function is_bot($ip) {

        $cmd = 'host ' . $ip;

        $str = shell_exec($cmd);

        if(strpos($str, "pointer ") !== false) {

            $array = array_reverse(preg_split("{[ \t]+}", $str));

            if(in_array("pointer", $array)) {

                $ind = -1 + array_search("pointer", $array);

                $domain = $array[$ind];

                if(preg_match("{(googlebot|google|googleusercontent)\.com$}", $domain)) {

                    $cmd = 'host ' . $domain;

                    $str = shell_exec($cmd);

                    if(strpos($str, "address ") !== false) {

                        $array = array_reverse(preg_split("{[ \t]+}", $str));

                        if(in_array("address", $array)) {

                            $ind = -1 + array_search("address", $array);

                            $ip2 = $array[$ind];

                            $ip4 = (filter_var($ip2, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) != false) ? $ip2 : null;
                           
                            if($ip4 !== null ) {

                               if($ip4 == $ip) {

                                    return true;
                               }

                               return false;
                            }
                            $ip6 = (filter_var($ip2, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) != false) ? $ip2 : null;
                           
                            $binary = ($ip6 != null) ? inet_pton($ip6) : false;

                            $ip6 = ($binary != false) ? inet_ntop($binary) : null;

                            if($ip6 !== null ) {
                   
                            if($ip == $ip6) {

                                    return true;
                                }

                                return false;
                            }
   
                            return false;
                        }
                       
                        return false;
                    }

                    return false;
                }

                $domain = preg_replace("{^(www)?\.?}", "", $domain);

                $regex = "{(bing|aol|voila|ia[_-]?archiver|ask|teoma|exabot|thumbnails|gigabot|inktomi|slurp|msnbot|altavista|w3c[_-]?|validator|yahoo|yandex)\.}";

                if(preg_match($regex, $domain)) {

                    return true;
                }

                return false;
            }

            return false;
        }

        return false;
    }

?>

[/code
 
WRInaute accro
Pardon

Voilà le lien donnant la méthode :

HTML:
   https://developers.google.com/search/docs/crawling-indexing/verifying-googlebot?hl=fr
 
WRInaute discret
Pour tous les ndd de bots, faut-il s'assurer que le reverse pointe bien vers la bonne ip ?
C'est mieux. Aussi, il faut s'assurer que l'IP provient bien de la plage d’adresses déclarée par le propriétaire du robot d'exploration, sauf DuckDuckBot, dont les addresses annoncées ne sont pas celles utilisées...
 
WRInaute accro
Bonjour

Google dit que quand une page est chargée en prerender, elle reçoit le header http :

Sec-Purpose: prefetch;prerender

Peut-on se fier à celà, et lancer l'incrémentation du compteur, soit si la page est en prerender, soit quand le mode prerender n'existe pas ( Chrome ou autre ) ?

Ceci du côté serveur ?

Le déceler coté client ralentit trop mon site

Merci beaucoup.
 
WRInaute accro
Rebonjour

Les reverse ne valent rien en matière de détection de bots.

Seule solution, bancale, le user-agent.

Que pensez-vous de ma fonction de détection de bots ?

Pour les moteurs de recherche.

Merci.

PHP:
    function is_bot() {

        $user_agent = isset($_SERVER["HTTP_USER_AGENT"]) ? $_SERVER["HTTP_USER_AGENT"] : null;

        if($user_agent === null) return false;

        $regex = "{(Googlebot\/|Googlebot\-Image\/|Googlebot\-Video\/|Storebot\-Google\/|Googlebot\-InspectionTool\/|GoogleOther|APIs\-Google|AdsBot\-Google\-Mobile|AdsBot\-Google|Mediapartners\-Google|Google\-Safety|FeedFetcher\-Google|GoogleProducer|Google\-Read\-Aloud|Google\-Site\-Verification|bingbot\/|adidxbot\/|MicrosoftPreview\/|AOLBuild|AOL[ ]+[4-9]\.0|VoilaBot|ia_archiver|\/archive\.org_bot|Ask[ ]+Jeeves\/Teoma|Baiduspider|Exabot\/\d|Exabot\-Thumbnails|Gigabot\/|Slurp\/|msnbot\/|Qwantify|Scooter|W3C_Validator\/|Yandex)}";

        if (preg_match($regex, $user_agent )) return true;

        return false;
    }
 
Discussions similaires
Haut