Skip to main content

LA SOLUZIONE:

Avevo di fronte sostanzialmente 3 possibilità, due delle quali decisamente splatter.

  • 1. Spulciarmi a manina santa 22.000 articoli e cercare di capire - senza per altro averne certezza alcuna - cosa gli dava fastidio ( SOLUZIONE SCARTATA )
  • 2. ELIMINARE fisicamente dal sito 22.000 articoli e ricominciare da capo ( SOLUZIONE SCARTATA )
  • 3. Ingegnarmi ( non poco ) e daje giò di reverse engineering

Ho scelto la soluzione 3.

Partiamo da quello che ho, dalle informazioni in mio possesso.

Quello che so è che :

  • 1. Spulciarmi a manina santa 22.000 articoli e cercare di capire - senza per altro averne certezza alcuna - cosa gli dava fastidio ( SOLUZIONE SCARTATA )
  • 2. ELIMINARE fisicamente dal sito 22.000 articoli e ricominciare da capo ( SOLUZIONE SCARTATA )
  • 3. Ingegnarmi ( non poco ) e daje giò di reverse engineering

E' molto?

E' sufficiente?

Non è poco.

In definitiva, mi basta aspettare che Assenzio vada a controllare il primo articolo a me noto, quello di Oliviero Toscani, e che io individui il suo IP.

Poi andrò a vedere in quali altri articoli del mio sito il suo IP compare e... BOOM beccati tutti gli articoli incriminati.

Già ma ci sono dei problemi non di poco conto che bisogna per forza tenere in considerazione.

Vediamoli:

  • 1. Non so quando Assenzio effettuerà il controllo.
  • 2. Il sito ha migliaia di visitatori al giorno e quindi, magari, parecchie persone potrebbero vedere quello stesso articolo. Chi fra di loro è Assenzio?
  • 3. Non ho un accesso ssh al server e quindi non posso consultare i log di Apache per identificarne l' ip. Ho solo un acesso FTP.
  • 4. Assenzio controllerebbe l' articolo su Oliviero Toscani e, vedendo che è stato "pulito", passerebbe a controllare l' articolo incriminato successivo ( che non conosco ).
    Vedendo che questo secondo articolo non è stato "pulito" ( perchè - appunto - non lo conosco ) potrebbe anche smettere di controllare i successivi dato che, in fin dei conti, basta che anche uno solo non sia conforme per rigettare la mia richiesta.
    In questo caso, quindi, potrebbe bocciarmi subito il nuovo ricorso senza che io possa venire a conoscenza delle ultime due url rimanenti considerato il fatto che Assenzio non le aprirebbe del tutto, queste non verrebbero loggate dal sistema ed io non potrei dedurle in alcun modo. Sob.

IL PIANO

Il piano è davvero molto semplice: consiste nel risolvere i problemi ed oltrepassare gli ostacoli.

I problemi vanno risolti. Sempre.

Risoluzione del problema 1:

Ho notato che quando ho fatto un ricorso per la violazione delle norme, Adsense mi ha risposto molto molto in fretta. Diciamo nel giro di qualche ora.

BENE.

Allora ciò vuol dire che il controllo di Assenzio avverrà in un tempo preciso e limitato e cioè da quando io manderò il ricorso sino a quando Adsense mi manderà una mail di risposta.

Qualche ORA quindi: tempo limitato e breve.

ll problema 1 è risolto.

Risoluzione del problema 2:

Chi, tra coloro che visiteranno ( in quell' arco di tempo ) l' articolo su Oliviero Toscani, è davvero Assenzio?

Qui si gioca a "Indovina Chi?", cari signori, se non lo avete ancora capito.

Abbiamo detto che Google non ha sedi "tecniche" in Italia. I loro "controller" sono in Irlanda o per lo meno non in Italia.

Questa è un' ottima notizia.

E' un' ottima notizia perchè il mio sito è in italiano e quindi saranno davvero pochi gli IP NON italiani che visiteranno in poche ore un articolo scritto in italiano su Oliviero Toscani e per giunta parecchio datato.

Quindi passiamo al setaccio tutti gli ip dei visitatori dell' articolo su Oliviero Toscani e buttiamo via tutti gli ip italiani.

http://www.ip2nation.com/

è un ottimo sito che offre un database di ip associati ad una nazione corrispondente. Decido quindi di installare sul mio server il db ip2nation e, dopo qualche prova, scopro che funziona alla grandissima e ci becca sempre ( o quasi ).

Adesso ho modo, via script php, di filtrare gli ip italiani e quindi di monitorare, di riflesso, solo quelli che non lo sono.

Come?

Semplice:

$db = mysql_connect($server, $username, $password) or die(mysql_error());
      mysql_select_db($dbname) or die(mysql_error());
        
$sql = 'SELECT 
            country
        FROM 
            ip2nation
        WHERE 
            ip < INET_ATON("'.$_SERVER['REMOTE_ADDR'].'") 
        ORDER BY 
            ip DESC 
        LIMIT 0,1';
list($country) = mysql_fetch_row(mysql_query($sql));
if ($country != 'it'){
    //eccoci qui: abbiamo filtrato tutti gli ip NON italiani!

}

Se siete un minimo skillati vi starete probabilmente chiedendo:"perchè filtri i non italiani invece di andarti a beccare direttamente gli irlandesi?"

Perchè se è vero che sono sicuro che i "controller" non sono fisicamente in Italia non sono altrettanto STRA CERTO che si trovino proprio in Irlanda. Lo suppongo, ma non lo so.

Inoltre, nel caso in cui ip2nation non riuscisse nel suo compito, non perderei comunque un IP potenzialmente utile, IP che invece sicuramente perderei nel caso di un filtro inverso e cioè del tipo "solo gli irlandesi".

Terzo motivo: non escludo che usino dei proxy.

Il problema n.2 è risolto.

Risoluzione del problema 3:

Non ho un logger stile quello di Linux Debian / Apache, che sarebbe davvero il massimo della vita ( Analytics non basta ASSOLUTAMENTE per una cosa del genere ).

Questo è un bel problema.

Ma il grande e saggio maestro Pai Mei diceva: "se non hai un logger, createne uno".

Seguirò il suo consiglio. Creo una dir sul server che chiamo "logadsense" e poi mi creo il mio bel logger integrandolo con i dati del db ip2nation ed applicando qualche altro bel filtro:

$sql = 'SELECT 
    country
FROM 
    ip2nation
WHERE 
    ip < INET_ATON("'.$_SERVER['REMOTE_ADDR'].'") 
ORDER BY 
    ip DESC 
LIMIT 0,1';
list($country) = mysql_fetch_row(mysql_query($sql));
if ($country != 'it' && isHuman()){

    //Da qui ho a che fare con un ip NON ITALIANO e che inoltre è quasi certamente un essere umano e NON UN BOT: filtro infatti con la funzione isHuman() - una funzione che ho scritto tempo fa e che pubblicherò in qualche mio futuro post - e che serve proprio a filtrare chi è un essere umano da chi è un robot
    
    // Setto la folder che ho creato per i log
    $logFolder = "logadsense";
    
    //Mi salvo la uri
    $uri = $_SERVER['REQUEST_URI'];

    //Recupero informazioni utili: ip, data e ora
    $today = getdate(); 
    $ip = $_SERVER['REMOTE_ADDR'];
    $month = $today['mon']; 
    $day = $today['mday']; 
    $year = $today['year'];
    $hours = $today['hours'];
    $minutes =  $today['minutes'];

    // decido il formato della mia stringa di log
    $stringToLog = $year . "-" . $month . "-" . $day . " " . $hours . ":" . $minutes . "  " . $ip . "  " . $uri . "\r\n";

    // creo tanti file di log quanti sono i giorni in cui lo script rimarrà attivo
    $file = $logFolder.'/'.$year."-".$month."-".$day.".txt";

    //pulisco i log antiquati ( del mese prima )
    if ($month == 1){
        $precMon = 12;
        $precYear=$year-1;
    }else{
        $precMon = $month -1;
        $precYear=$year;
    }
    $oldFile = $logFolder.'/'.$precYear."-".$precMon."-".$day.".txt";
    if (file_exists($oldFile)){
        delete($oldFile);
    }
    
    //Se non esiste il file di log di oggi, lo creo
    if (!file_exists($file)){
        touch($file);
    }

    //ancora filtri: voglio loggare solo le pagina con estensione html

    if (preg_match("/.html/i", $uri)){
        //Tutto come da copione: scrivo.
        file_put_contents($file, $stringToLog, FILE_APPEND | LOCK_EX);
    }

}

Ok, il codice non è bellissimo, ne convengo ( l' ho scritto di fretta e servirà solo per qualche ora) ma funziona.

Ecco cosa viene fuori:

I file, al loro interno, sono fatti così ( notate che il log parte da mezzanotte in punto di ogni giorno ):

Ora: dove mettere questo codice?

In una parte del sito che viene richiamata ogni volta che compare un articolo o una pagina 404 ( dopo capirete perchè anche le 404 ).

Nel mio caso nel file footer.php.

So cosa vi state chiedendo, mascherine: "con Wordpress e Joomla come faccio, dove lo metto?"

Potete metterlo nel file del template, per esempio.

Il problema n.3 è risolto.

Risoluzione del problema 4:

Devo fare in modo che Assenzio apra fisicamente tutti, ma proprio TUTTI, gli articoli incriminati ( così che io possa loggarli e scoprire quali sono ).

Come fare?

Perchè io sia sicuro che li apra tutti fino all' ultimo devo fare in modo che tutti, sino almeno al penultimo, siano OK.

La soluzione che ho trovato è stata quella di metterli quasi tutti offline per qualche ora, il tempo tra la mia richiesta di ricorso e la loro risposta.

Ne ho lasciati online solo un centinaio, i più recenti, nella speranza di non essere così sfortunato che uno degli articoli incriminati fosse proprio fra questi 100 ( ma le probabilità erano davvero minime: 100 su 22.000 ).

Nel mio caso ho fatto così:

if ($id_articolo <= 21900){
      header("HTTP/1.0 404 Not Found"); 
      header ("Location:http://www.xxxxx.xxx/errore/");
      die();
}

NB Se mettete questo ultimo script prima del logger siete abbastanza ciucci.

Se l' id dell' articolo è minore o uguale a 21900 restituisci un 404.

Ho schiacciato il tasto "SPENG", insomma.

Come dicevo più in alto, però, si è trattato solo di qualche ora.

Pensandoci bene, col senno di poi, avrei potuto usare una soluzione decisamente più elegante e meno traumatica ( che non vi dirò ;-P ) ma ormai quel che è fatto è fatto.

Soprattutto: ho risolto così e ve la racconto così.

Anyway, Google non si è arrabbiato poi tanto, anzi: non si è arrabbiato per niente.

Le scansioni sono continuate e tutto è tornato alla normalità in pochissimo tempo sia a livello di indicizzazione che di utenza.

Alla fine un piccolo "blackout" ci può stare ogni tanto.

Il problema n. 4 è risolto.

BENE BENE BENE....

E' TUTTO PRONTO!

Scriviamo un nuovo ricorso a Google Adsense

https://www.google.com/adsense/app#policy-appeal

ed aspettiamo.

Passa qualche ora ( circa 5 ) e mi arriva la seguente mail:

Gentile publisher,

La ringraziamo di avere apportato le modifiche richieste per conformare il sito alle nostre norme. Dopo un'attenta analisi di xxxx.xxx, abbiamo riattivato la pubblicazione degli annunci sul sito.

Poiché la pubblicazione degli annunci sul sito è stata temporaneamente interrotta, la riattivazione potrebbe richiedere più di 48 ore. Apprezziamo la sua comprensione e la sua collaborazione.

Cordiali saluti,

Il team di Google AdSense

WOW! Il galleggiante si muove.

Ma non è mica finita qui.

Adesso bisogna pulire PER BENE quello che non gli andava a genio PRIMA di tornare online.

Nella rete ci è finito qualcuno ma ora bisogna vedere che cosa abbiamo davvero pescato oggi.

Mi vado a vedere il file di log corrispondente al giorno del controllo ed elimino tutti i log precedenti alla mia richiesta di ricorso e successivi alla loro mail di risposta.

Adesso faccio un CTRL+F e cerco "oliviero" ( l' articolo su Oliviero Toscani, ricordate? )

e...TANA PER ASSENZIO!

Compare un solo indirizzo ip.

Facciamo una verifichina: andiamo su
http://www.iplocation.net/
e vediamo un po' che cosa sà dirmi di quell' ip.

And the winner is...IRLANDA!

Perfetto: ho trovato l' ip di Assenzio ( che mi salvo :) ).

Adesso un secondo CTRL+F sul file di log e questa volta cerco il suo IP.

Cosa scopro?

Compare 4 volte in tutto, guarda caso esattamente quanti erano gli articoli che mi contestavano.

E' fatta!

A questo punto:

  • Mi tiro giù gli URI degli articoli, li cancello, e rimetto tutti gli altri articoli "buoni" online.
  • Stoppo il mio logger, tanto non serve più. Buon viaggio, Aquarius. E grazie di cuore.
  • Anzi, a dir la verità, ho scritto un programma php che mi logga solo le pagine aperte da quell' ip e mi manda una mail ogni volta che quell' IP mi visita.. non si sa mai. Il nemico va sempre tenuto d' occhio.

Il caso è chiuso: ciao Assenzio, chiunque tu sia.

Alla prossima!

Condividi

Page