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)
Source: Google crawlers
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
Source: Vérification de Googlebot
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
Googlebot]. https://support.google.com/webmasters/answer/1061943 [Google
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]