== Contenuti ==

Questo dataset contiene alcuni risultati dell'analisi privacy relativa all'uso illegittimo di Google Analytics in siti italici, su cui si veda:
https://federicoleva.eu/it/richiesta-rimozione-google-analytics/

Per il momento si forniscono alcune informazioni sui siti analizzati e sulle comunicazioni inviate (in particolare il sondaggio LimeSurvey usato inizialmente). È anche incluso un esempio di output per un sito analizzato, per sperimentare gli esempi di interrogazioni seguenti.

Non sono fornite le risposte alle domande.

L'elenco *domains.txt è relativo a domini che appaiono caricare Google Analytics (cioè che producono richieste ai domini di Google Analytics). Negli elenchi *MX.txt e *TXT.txt sono contenute alcune registrazioni DNS corrispondenti (MX e TXT).

== Istruzioni ==

I dati sono prodotti usando il software libero ( https://fsfe.org/freesoftware/ ) webbkoll, che a sua volta usa Chromium. Per ulteriori informazioni sul funzionamento e su come interpretare i dati si vedano il codice (pubblicato con licenza MIT) e il sito relativo: https://webbkoll.dataskydd.net/en/faq .

Per usare i dati in formato JSON si consigliano jq ( https://stedolan.github.io/jq/ ) e jello ( https://pypi.org/project/jello/ ). Gli esempi successivi si riferiscono a un sistema operativo GNU/Linux.

== Esempi di interrogazioni ==

Seguono alcuni esempi per consultare i dati da una riga di comando bash ( https://www.gnu.org/software/bash/ ).

Elencare tutti gli URL da cui sono stati raccolti i dati:

    for file in *gz ; do zcat $file | jq -r ".final_url" ; done

Elencare i domini contattati più di frequente:

    find -name "*json.gz" -print0 | xargs -0 -P16 -I§ sh -c "zcat § | jq -r '.responses | select( . != null ) | .[] | .url' | cut -f3 -d/ " | sort | uniq -c | sort -nr | head -n50

Elencare i domini che richiamano Google Analytics e risorse connesse:

    find -name "*json.gz" -printf "%f\n" | xargs -P16 -I§ sh -c "zgrep -El '(google-analytics.com|googletagmanager.com|googletagservices.com|analytics.google.com)' §" | sed 's,.json.gz,,g'

Definito has_ga_strict.sh come:

    REQS=`zcat $1 | jq -r '[(.responses | .[] | select(.url | contains("google-analytics.com") or contains("analytics.google.com") )| .url )] | length'`
    if [ $REQS != "0" ]; then
        echo $1 | sed 's,.json.gz,,g'
    fi

Contare quanti domini contengono una tale richiesta da un campione di 1000:

    find -maxdepth 1 -type f -name "*json.gz" -printf "%f\n" | sort | shuf -n 1000 | xargs -P16 -I§ bash -c "has_ga_strict.sh §" | wc -l

Definito extract_ga_cookies.sh come:

    jq -er '[.final_url, .remote_address.ip, (.response_headers.date | if . != null then . else "Thu, 01 Jan 1970 00:00:00 GMT" end | strptime("%a, %d %b %Y %H:%M:%S GMT") | strftime("%Y-%m-%dT%H:%M:%S%z")), ( [ .cookies | select( . != null ) | .[] | select(.name == "_ga") | .value ] | join (":") ), ( [ ( .cookies | select( . != null ) | .[] | select(.name | startswith("_ga_") or startswith("_gat_") ) | .name | sub("_ga_"; "") | sub("_gat_"; "") ) , ( ( .responses | .[] | select(.url | ( contains("google-analytics.com") or contains("analytics.google.com")) and contains("collect") )| .url | scan("tid=[^&]+") | sub("tid="; "") )) ] | unique | join (":") ) ] | .[]' | paste -s -d "\t"

Estrarre identificativi GA da un campione di 1000 domini, in formato csv:

    echo -e "final_url\tip\tdate\t_ga\tid" > ga_domains_ids.csv ; find -maxdepth 1 -type f -name "*json.gz" -printf "%f\n" | sort | shuf -n 1000 | xargs -P16 -I§ bash -c "zcat § | extract_ga_cookies.sh | tee -a ga_domains_ids.csv"

Elencare i domini che depositano un cookie palesemente connesso a Google Analytics:

    for file in `find -maxdepth 1 -type f -name "*json.gz"` ; do zcat $file | jq -er  '.cookies | select( . != null ) | .[] | select(.name | startswith("_ga") or startswith("_gid") ) | .value' 2>&1 > /dev/null ; if [ $? > 0 ] ; then echo "$file" ; fi ; done | sed 's,.json.gz,,'

Elencare i codici UA trovati nei cookie:

    for file in *gz ; do zcat $file | jq -er  '.cookies | select( . != null ) | .[] | select(.name | startswith("_gat_") ) | .name' ; done
    
Elencare i codici UA più usati:

    find -maxdepth 1 -type f -name "*json.gz" -print0 | xargs -0 -P16 -I§ bash -c "zcat § | jq -r  '.cookies | select( . != null ) | .[] | select(.name | startswith(\"_gat_\") ) | .name'" | grep -Eo "[0-9]{5,}" | sort | uniq -c | sort -nr | head -n 50
