EUCookieLaw 3.0 – Registrare il consenso dell’utente

EUCookieLaw3 è una soluzione Open Source che si rivolge agli utilizzatori di WordPress e a tutto il resto del mondo utile al blocco preventivo dei cookie e alla visualizzazione del banner informativo ai fini della CookieLaw del 2015 e il GDPR entrato in vigore il 25 maggio del 2018. Proprio il GDPR richiede che venga eseguita la registrazione elettronica del consenso da parte del titolare del sito. In questo articolo sarà spiegato come viene gestito il consenso da parte di EUCookieLaw per WordPress, e come è possibile implementare la registrazione del consenso su un qualsiasi altro sito che non è basato su WordPress.

Poichè l’operazione di registrazione per chi usa WordPress è molto più semplice che per gli altri, è opportuno iniziare proprio da qui. Se ne suggerisce comunque la lettura anche agli interessati alla soluzione finale per comprendere come strutturare la propria soluzione alternativa.

Per chi usa WordPress

Dal pannello di controllo di EUCookieLaw3, è possibile abilitare l’opzione Registra i consensi dell’utente. Tale operazione permette di registrare tutte le attività di consenso e revoca eseguite da ciascun utente che naviga sul sito senza però diventare un’informazione di profilazione.

Infatti i possessori di WordPress, potranno verificare che nel menu laterale hanno una nuova voce: “Consents” che gli permette di visionare l’elenco grezzo di tutti i consensi forniti dagli utenti nel tempo.

Come funziona?

Partendo da questo frammento di documentazione sulla gestione del consenso, possiamo comprendere che il plugin per WordPress costruisce per conto del proprietario del sito una funzione JavaScript nella pagina denominata userConsentCallback.

Questa funzione riceve 3 parametri in input: l’identificativo del trattamento, l’intenzione dell’utente (ok per il consenso e ko per il rifiuto) e quando ciò è avvenuto.

Attraverso questa funzione è possibile quindi gestire in autonomia la registrazione del consenso.

window.userConsentCallback = function ( groupName, agreement, when ) {
    /*
     * Qui bisogna mettere il codice per la registrazione del consenso
     */
};

La suddetta funzione viene invocata ogni volta che l’utente svolge una scelta nel banner informativo.

Contesto di applicazione

Secondo le indicazioni di molti legali, è necessario registrare il consenso dell’utente, e bisogna farlo mantenendo una traccia elettronica che comprovi l’avvenuta accettazione o rifiuto.

Per poter identificare univocamente il consenso, in EUCookieLaw3 è stato deciso di produrre un’informazione univoca e conservarla lontana dai Cookie (nel LocalStorage), che sia riconducibile approssimativamente ad un solo utente (o comunque ad un solo browser). Poichè questa informazione di per se potrebbe non essere univoca, è stato deciso di accoppiarlo ad un indirizzo IP che non è necessariamente riconducibile ad un solo individuo, visto che solo l’Internet Provider è in grado di risalire esattamente alla sorgente mentre il titolare del sito potrebbe risalire al massimo al paese di provenienza se mai dovesse incrociare i dati con una banca dati di georeferenziazione degli indirizzi IP.

Essendo la finalità dell’azione il comprovare l’avvenuta firma di un documento elettronico, è fondamentale quindi conservare alcuni dati che possono essere riconducibili a dati personali (indirizzo IP) ed ad un’azione nel browser sul proprio sito (identificativo eucookielaw).

Per chi ha qualche nozione di rete, converrà con me che l’indirizzo IP è un dato variabile in quanto viene assegnato tra gli indirizzi IP disponibili al nostro Internet Provider, fatto salvo per alcune tipologie di contratto che prevedono un’assegnazione esclusiva di uno specifico indirizzo IP.

L’accoppiata “identificativo eucookielaw” + “indirizzo IP” potrebbe fornire una sorta di firma elettronica dell’azione, non è però sufficiente ragionare in questi termini poichè, come è già stato evidenziato, l’indirizzo IP potrebbe essere dinamico, anzi il più delle volte è così. Quindi per comprovare la veridicità della firma è necessario registrare non solo l’indirizzo IP ma anche la data esatta al secondo in cui questa operazione è avvenuta.

Pertanto, la parte server di EUCookieLaw3 per WordPress registra:

  1. l’indirizzo IP,
  2. l’identificativo univoco prodotto da EUCookieLaw3,
  3. la data di avvenuta registrazione
  4. la finalità di trattamento
  5. la scelta dell’utente (l’accettazione oppure il rifiuto).

L’attivazione della voce Registra i consensi dell’utente, comunica a WordPress che al caricamento della parte pubblica del sito deve essere costruita una funzione che svolga esattamente questa operazione.

Quindi, per semplificare l’azione svolta è la seguente:

window.userConsentCallback = function ( groupName, agreement, when ) {
   var sign = localStorage.getItem( 'eucookielaw-client-signature' ) || false;
   if ( sign ) {
      $.post( eucookielawGlobalData.ajax_url, {
         action: 'consent',
         name:   groupName,
         status: agreement,
         when:   when,
         guid:   sign
      } );
   }
};

Analisi del codice

Analizziamo attentamente il codice:

var sign = localStorage.getItem( 'eucookielaw-client-signature' ) || false;

Si occupa di verificare la presenza dell’identificativo univoco prodotto da EUCookieLaw3,

$.post( eucookielawGlobalData.ajax_url, {
    action: 'consent',
    name: groupName,
    status: agreement,
    when: when,
    guid: sign
} );

Invece trasmette le informazioni ricevute in input, insieme all’identificativo univoco prodotto da EUCookieLaw3 ad una pagina server.

La pagina server si occupa esclusivamente di immagazzinare queste informazioni nella banca dati.

Per coloro che non utilizzano WordPress è importante quindi, al fine della registrazione del consenso, replicare la medesima funzione e decidere dove registrare il consenso, come archiviarlo e cosa conservare.

Il codice che segue è un esempio di funzione personalizzata:

function userConsentCallback(groupName, agreement, when ){

   var guid = localStorage.getItem('eucookielaw-client-signature');

   $.ajax({
      url: 'register-consent.php',
      method: 'post',
      data: {
         name: groupName,
         status: agreement,
         when: when,
         guid: guid
      }
   });

}

Nel codice viene fatto uso della funzione AJAX di jQuery, giusto per una semplificazione del concetto.

La funzione richiama uno script sul server denominato register-consent.php, ma potremmo decidere di utilizzare un server NodeJS oppure Python, ASP.NET o qualsiasi altra tecnologia.

L’obiettivo finale comunque è la registrazione del consenso. Il codice esemplificativo in PHP portrebbe essere il seguente:

<?php
session_start();

if(!isset($_SESSION['consents'])){
   $_SESSION['consents'] = json_encode([]);
}


$consents = json_decode($_SESSION['consents']);

$consents[] = $_POST;
$_SESSION['consents'] = json_encode($consents);

die('ok');

Questo codice andrà a scrivere in sessione le informazioni, pertanto il dato sarà estremamente volatile. È suggerito implementare una funzione di archiviazione ad-hoc che registri il consenso su filesystem oppure su banca dati.

Perchè salvare tutte queste informazioni?

La necessità di salvare queste informazioni è quella di essere in un futuro in grado di generare un report dettagliato del consenso fornito dall’utente. Ciò è possibile solo conservandole tutte.

Se non fosse ben chiaro il motivo di questa azione, è opportuno presentare un esempio concreto.

Identifichiamo:

  • in Mario il proprietario del sito web che deve comprovare il consenso degli utenti
  • e in Marco l’utente che naviga sul sito

Ecco a voi la storia

Giorno 1 – Lunedì

  1. Lunedì Marco arriva sul sito di Mario il quale presenta il banner informativo.
  2. Viene prodotto un identificativo univoco che per semplificare il ragionamento è il numerino 12345
  3. Marco fornisce il consenso al trattamento dei propri dati ai fini statistici
  4. Mario registra che l’identificativo 12345 Lunedì alle 15 ha manifestato il proprio consenso per il trattamento statistico
  5. Marco rifiuta il trattamento per finalità di marketing.
  6. Mario registra quindi che l’identificativo 12345 Lunedì alle 15 ha manifestato il proprio dissenso per il trattamento marketing

In questo giorno Mario avrà 2 informazioni in banca dati,

  • 12345 ha accettato le statistiche
  • 12345 ha rifiutato il marketing

Giorno 2 – Martedì

  1. Martedì Marco ritorna sul sito di Mario decide di rivedere le sue scelte.
  2. Quindi accetta il trattamento ai fini di marketing.
  3. Mario registra che l’identificativo 12345 Martedì alle 17 ha manifestato il proprio consenso per il trattamento di marketing

Quindi la situazione attuale è che:

  • 12345 ha accettato le statistiche
  • 12345 ha accettato il marketing

Di conseguenza tutti i cookie di marketing vengono installati nel browser di Marco.

Giorno 3 – Mercoledì

  1. Mercoledì Marco ritorna sul sito di Mario come affezionatissimo alle sue attività.
  2. Decide di revocare la fornitura di suoi dati ai fini di marketing
  3. Mario registra che l’identificativo 12345 Mercoledì alle 14 ha revocato il proprio consenso per il trattamento di marketing

Quindi la situazione è ritornata la stessa descritta nel Giorno 1 – Lunedì.

Giorno 4 – Giovedì

Marco decide di visionare i cookie che si ritrova nel suo computer, ed il risultato è a suo avviso preoccupante, poichè si ritrova con dei cookie prodotti a fini di marketing nel proprio browser derivanti proprio dal sito di Mario, ma lui ricorda benissimo che ha revocato tale autorizzazione. Quindi scrive a Mario chiedendogli chiarimenti a riguardo.

Mario potrà fornirgli a quel punto l’indicazione che tra il martedì alle 18 e mercoledì alle 14 Marco ha fornito il proprio consenso al trattamento ai fini di marketing e che il cookie risale proprio a quel periodo di consenso del trattamento.

Come fornire l’elenco dei consensi all’utente

In WordPress, è sufficiente inserire su una pagina lo shortcode [[show_consents]] che mostrerà a ciascun utente i propri consensi forniti nei confronti del sito dal primo accesso ad oggi.

Per i possessori di siti non WordPress, dovranno implementare la funzione in autonomia seguendo le indicazioni riportate in questo articolo al fine di implementare quello che dal punto di vista normativo è previsto.