featured-image

Catturare gli spiders invasivi

Sovente nell’analizzare il traffico dei nostri siti rileviamo un consumo elevato di banda utilizzata dai vari Spiders che periodicamente scansionano le nostre pagine web. Alcuni di essi appartengono a motori di ricerca – come ad esempio Google,  Bing , Yahoo, tanto per citarne i maggiori – e avere le proprie pagine WEB indicizzate nei principali motori di ricerca significa una migliore visibilità del sito. Tuttavia può capitare di imbatterci in altri web crawler  che seguendo i link ipertestuali leggono tutte (o quasi tutte) le pagine del nostro sito causando quel consumo di banda anomalo che può anche arrivare al 90% del traffico globale del nostro dominio.

Ma non solo i motori di ricerca, grandi o piccoli che siano, scansionano la rete, sono molto attivi anche gli Spambot che si occupano di trovare indirizzi email da utilizzare per l’invio di messaggi pubblicitari, così come i bot alla ricerca di form dove sia possibile in automatico postare link sottoforma di commenti (solitamente link a siti porno o di gioco d’azzado). E un sito pieno di link a domini non affidabili viene penalizzato da Google oltre che a scadere in qualità, due elementi da non trascurare.

Altro problema che causano gli spider se sono molto invasivi è lo stress al server che ospita il dominio con conseguente rallentamento della navigabilità del sito da parte degli utenti “umani”: unito al problema di consuno di banda (anche quando è “assicurato” traffico illimitato il problema esiste ugualmente perchè si satura l’ampiezza di banda) rende quasi d’obbligo pensare a soluzioni per inibire l’accesso a questi crawler. Una soluzione può essere quella di utilizzare il file .htaccess con all’interno il comando deny from xxx.xxx.xxx.xxx (dove xxx.xxx.xxx.xxx è l’IP da bloccare)

Attenzione: il file .htaccess è presente solo su Server LINUX, quindi se il vostro sito è su server WINDOWS questo articolo non fa per voi e pertanto continuerete a ricevere la visita di tutti questi Spider (Suggerimento: migrate a LINUX!). Sarà anche necessario avere accesso al file .htaccess tramite FTP o da un Pannello di Amministrazione Dominio (esempio PLESK, CPanell, Webmin, ecc.)

Naturalmente non è pensabile riportare manualmente all’interno del file .htaccess tutti gli IP che vogliamo escludere, quindi è necessario utilizzare uno script e alcuni accorgimenti per rendere tutta la procedura automatica.

Intanto dovete aver preparato il file robots.txt – file che indica ai motori di ricerca cosa devono indicizzare e cosa devono escludere, per l’uso più dettagliato del file robotstxt rimando a un prossimo articolo – con all’interno il comando:

 

Disallow: /bad-bots.php

 

Questo comando indica ai motori di ricerca “seri”, quindi quelli che ci interessano, di non andare a leggere il file bad-bots.php che posizioneremo nella root del sito e nel quale ci sarà lo script per “catturare” il BOT malevolo, che non essendo predisposto per seguire le indicazioni del file robots.txt cadrà nella nostra trappola.

Di seguito il codice che dovrà essere incluso nel file bad-bots.php:
(da seven-3-five.blogspot.com)

 

<?php
header("Content-type: text/html; charset=utf-8");
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>BAD BOTS DENIED</title>
</head>
<body>
<p>BAD BOTS DENIED</p>
<?php
// author: seven-3-five, 2006-09-04, seven-3-five.blogspot.com
//this script is the meat and potatoes of the bot-trap
// SERVER VARIABLES USED TO IDENTIFY THE OFFENDING BOT
$ip = $_SERVER['REMOTE_ADDR'];
$agent = $_SERVER['HTTP_USER_AGENT'];
//$request = $_SERVER['REQUEST_URI'];
//$referer = $_SERVER['HTTP_REFERER'];
$text = 'deny from ' . $ip . "n";
$file = '.htaccess';
$good = Array('google',
'yahoo',
'msn',
//'',
);
$bb=0;
foreach ($good AS $gb) {
if (!strstr($agent, strtolower($gb)))
$bb++;
}
if ($bb==sizeof($good)) {
add_badbot($text, $file);
}
// Function add_bad_bot($text, $file_name): appends $text to $file_name
// make sure PHP has permission to write to $file_name
function add_badbot($text, $file_name) {
$handle = fopen($file_name, 'a');
fwrite($handle, $text);
fclose($handle);
}
$subject = 'report bad-bots per arredocasagiardino.it';
$email = 'webmaster@cyberspazio.org'; //edit accordingly
$to = $email;
$message ='ip: ' . $ip . "rn" .
'user-agent string: ' . $agent . "rn" .
'requested url: ' . $request . "rn" .
'referer: ' . $referer . "rn"; // often is blank
$message = wordwrap($message, 70);
//49
$headers = 'From: ' . $email . "rn" . 'Reply-To: ' . $email . "rn" . 'X-Mailer PHP/' . phpversion();

mail($to, $subject, $message, $headers);

?>

</body>
</html>

 

Ricordatevi di inserire la vostra email nella riga “$email = ‘metti-la@tua-email’; //edit accordingly” in modo che ogni volta che verrà catturato uno Spider riceverete l’avviso.

IMPORTANTE: assicuratevi che il vostro file .htaccess sia presente nella root del vostro dominio e che abbia i permessi di scrittura; inoltre – MOLTO IMPORTANTE – assicuratevi che, nel caso all’interno del file .htaccess siano presenti altre righe di comando, ci sia almeno un “a capo” dopo l’ultima riga altrimenti il comando deny from xxx.xxx.xxx.xxx sarà scritto sulla stessa ultima riga con il risultato di bloccare il vostro sito.

L’ultima operazione da compiere consiste nell’inserire un link in fondo all’Home Page del sito (è sufficiente la HOME, è questa il riferimento iniziale per tutti gli spider) che colleghi il file bad-bots.php . Il codice html del link dovrà essere scritto in modo che l’utente visitatore non lo possa vedere e che Google non lo consideri un elemento penalizzante, quindi dovrà contenere l’attributo rel=”nofollow” e non dovrà avere Anchor Text:

 

<p style="color:white;background:white;height:0;visibility:collapse;">
<a href="badbots.php" >.</a>
</p>

Consiglio di crearsi una copia di backup del proprio file .htaccess e al primo avviso ricevuto per email di andare a controllare al più presto il funzionamento del sito.

Personalmente utilizzo questo script su diversi siti ecommerce affiliati ad Amazon, che per via del limite di query orarie permesse sulle API di Amazon è necessario inibire tutti questi Spider divoratori di risorse.

Come sempre, sono graditi commenti e integrazioni a questo articolo, così come sono gradite le segnalazioni su facebook e il click sul bottone Google +1

Grazie 🙂

CYBERSPAZIO WEB HOSTING di Mattiuzzi Marco | Partita I.V.A. 02131900025 | C.F. MTTMRC55M30L750R | REA VC-181376 | PEC cyberspazio@pec-email.it