Java - Vérifie si la requête Web provient du robot d’exploration de Google

google-Bot

Si une requête Web provient de Google Crawler ou de Google Bot, l’agent utilisateur demandé doit ressembler à ceci:

Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
or
(rarely used): Googlebot/2.1 (+http://www.google.com/bot.html)

1. Exemple Java

En Java, vous pouvez obtenir le “agent utilisateur” de HttpServletRequest .

Exemple: service hébergé sur abcdefg.com

    @Autowired
    private HttpServletRequest request;

   //...
    String userAgent =  request.getHeader("user-agent");

    System.out.println("User Agent : " + userAgent);

    if(!StringUtils.isEmpty(userAgent)){
        if(userAgent.toLowerCase().contains("googlebot")){
            System.out.println("This is Google bot");
        }else{
            System.out.println("Not from Google");
        }

    }

2. Faux agent utilisateur

Il est facile de créer une fausse/fausse requête d’agent utilisateur. Par exemple :

Exemple: envoi d’une fausse demande d’agent d’utilisateur à abcdefg.com

package com.mkyong.web;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;

public class test {

    public static void main(String[]args) throws Exception {

        HttpClient client = HttpClientBuilder.create().build();
        HttpGet request = new HttpGet("abcdefg.com");
        request.setHeader("user-agent", "fake googlebot");
        HttpResponse response = client.execute(request);

    }

}

Sortie sur abcdefg.com.

User Agent : fake googlebot

This is Google bot

3. Vérification de Googlebot

Pour vérifier le vrai Googlebot, vous pouvez utiliser la «recherche DNS inversée» manuellement comme suit:

> host 66.249.66.1
1.66.249.66.in-addr.arpa domain name pointer
crawl-66-249-66-1.googlebot.com.

> host crawl-66-249-66-1.googlebot.com
crawl-66-249-66-1.googlebot.com has address 66.249.66.1

4. Vérification de Googlebot - Exemple Java

Sur la base de la théorie ci-dessus, nous pouvons simuler la 1ère partie de la «recherche inversée DNS». Utilisez la commande host pour déterminer où se trouve le point IP demandé.

Si la requête provient de Googlebot, il affichera ce modèle:

«xx ** .googlebot.com.`.

La commande P.S host est disponible sur le système ** nix uniquement .

Exemple: Détecter un faux utilisateur

    @Autowired
    private HttpServletRequest request;

   //...
    String requestIp = getRequestIp();
    String userAgent = request.getHeader("user-agent");

    System.out.println("User Agent : " + userAgent);

    if(!StringUtils.isEmpty(userAgent)){

        if(userAgent.toLowerCase().contains("googlebot")){

           //check fake user agent
            String output = executeCommand("host " + requestIp);
            System.out.println("Output : " + output);

            if(output.toLowerCase().contains("googlebot.com")){
                System.out.println("This is Google bot");
            }else{
                System.out.println("This is fake user agent");
            }

        }else{
            System.out.println("Not from Google");
        }
    }

   //get requested IP
    private String getRequestIp() {
        String ipAddress = request.getHeader("X-FORWARDED-FOR");
        if (ipAddress == null) {
            ipAddress = request.getRemoteAddr();
        }
        return ipAddress;
    }

   //execute external command
    private String executeCommand(String command) {

        StringBuffer output = new StringBuffer();

        Process p;
        try {
            p = Runtime.getRuntime().exec(command);
            p.waitFor();
            BufferedReader reader =
                new BufferedReader(new InputStreamReader(p.getInputStream()));

            String line = "";
            while ((line = reader.readLine())!= null) {
                output.append(line + "\n");
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return output.toString();

    }

Essayez à nouveau l’exemple de «faux agent utilisateur» «étape 2». Maintenant, vous obtenez cette sortie:

Output : Host 142.1.168.192.in-addr.arpa. not found: 3(NXDOMAIN)//this output may vary.

User Agent : fake googlebot
This is fake user agent
  • Remarque ** Cette solution simple risque de ne pas pouvoir arrêter l’agent utilisateur factice/usurpé à 100%, mais cette couche de sécurité supplémentaire devrait pouvoir arrêter la plupart des attaques d’usurpation d’agent utilisateur de base.

Si vous avez une meilleure solution, partagez-la ci-dessous, merci.

Références

chenilles/a>]. lien://java/comment-exécuter-shell-commande-de-java/[Exécuter shell

commande de Java]

lien://tag/googlebot/[googlebot]lien://tag/utilisateur-agent/[agent utilisateur]