Cookie Law, due plugin per WordPress a pagamento

Da una conversazione pacifica in un gruppo di discussione sui Cookie su Facebook, mi è venuta la malsana intenzione, pur non essendo admin del gruppo, di sedare una quasi rissa virtuale e rendermi osservatore super-partes di due soluzioni messe sotto accusa, per fare luce nei confronti di eventuali acquirenti, sull’utilità dell’una e dell’altra. Ovviamente, entrambe le soluzioni sono a pagamento e si tratta di  Bootcooker 3.0.0 e Dynamic Cookie Blocker 3.0.

Premessa

Come da accordi con i due sviluppatori, in questo articolo non farò menzione alcuna della mia soluzione Open Source.

Inoltre c’è da fare un’ulteriore premessa: mi è stato fornito dagli stessi autori il codice sorgente dei loro plugin al solo scopo di valutarli nelle funzionalità e non di utilizzarli su siti terzi.

Infine, entrambi hanno omesso di fornirmi alcune parti di codice che ritengono sia il punto di forza della propria soluzione. Quindi, rispettando le loro decisioni, questa recensione cercherà di fornire dettagli obiettivi, per quanto in mio possesso, lasciando al lettore la valutazione su quale prodotto sia il migliore o comunque il più adatto alle proprie necessità. Inoltre, non essendo un articolo promozionale, non riporterò i costi, dettagli sulla tipologia di supporto offerto e link alle due soluzioni proposte, lasciando al lettore l’onere della ricerca sul Web, se interessato.

Rivolgendomi invece agli autori dei due plugin, chiedo di leggere questo articolo in un’ottica costruttiva, che possa dare loro lo spunto a correggere gli eventuali errori e migliorare il servizio fornito ai relativi clienti o potenziali acquirenti.

 

Cosa sarà valutato

Anche questo è un aspetto spinoso. Determinare una lista di funzionalità potrebbe significare spingere il potenziale aqcuirente verso l’una o l’altra soluzione, quindi mi sono affidato direttamente ai relativi siti, per identificare le funzionalità dichiarate ed analizzare le modalità con cui viene svolto questo compito.

  1. Banner con informativa breve
  2. Modalità di accettazione dei cookie
  3. Blocco preventivo
  4. Blocco automatico
  5. Refresh all’accettazione
  6. Funzionamento senza JavaScript
  7. Compatibilità con plugin di cache
  8. Richiesta di incapsulamento degli elementi da bloccare
  9. Configurabilità
  10. Supporto al multilingua

Per analizzare i suddetti punti, non potendo usufruire di un’installazione completa in locale con la quale provare le più disparate configurazioni, utilizzerò i rispettivi siti dimostrativi, e chiedo scusa se talvolta mi soffermerò in qualche tecnicismo. È il mio lavoro.

Banner con informativa breve

Entrambi i plugin presentano una barra informativa molto gradevole a vedersi. Per entrambi, nel sito dimostrativo, la barra è collocata in alto e si presenta sotto forma di banner con il pulsante di consenso e un link per accedere all’informativa. A differenza di Bootcooker, il plugin Dynamic Cookie Blocker presenta un’ulteriore tasto di chiusura del banner in alto a destra ( × ). Solo Dynamic Cookie Blocker presenta presenta un opzione per collocare il banner in alto o in basso nella pagina e uno shortcode per riconsiderare la scelta effettuata nei confronti della cookie policy.

Modalità di accettazione dei cookie

Secondo i chiarimenti del Garante (vedi 5. Modalità di acquisizione del consenso), il consenso può essere manifestato tramite esplicita autorizzazione oppure procedendo nella navigazione nel sito. Questo ovviamente si traduce, nel contesto di una pagina Web, nello scroll della pagina o sul click su qualsiasi elemento della pagina oltre al click diretto sul pulsante di accettazione. Ebbene, entrambi i plugin consentono di manifestare il consenso tramite il pulsante di conferma, scroll o click su un qualsiasi elemento della pagina da quanto dichiarato, poiché però nel sito dimostrativo di Bootcooker non è implementata questa funzionalità, bisogna basarsi esclusivamente su quanto dichiarato nella pagina informativa del plugin, mentre invece, nel sito dimostrativo di Dynamic Cookie Blocker, non è volutamente attivato il consenso allo scroll (secondo dichiarazione dell’autore per apprezzare meglio il blocco/sblocco dei contenuti) che comunque risulta disponibile secondo quanto analizzato nel codice sorgente che mi è stato fornito.

Blocco preventivo

Entrambi i plugin effettuano un blocco preventivo dei contenuti, Dynamic Cookie Blocker implementa questa funzionalità lato server, mentre Bootcooker svolge questo compito lato client. Entriamo nel tecnico delle rispettive soluzioni e scopriamo i vantaggi e gli svantaggi di ciascuna di esse.

Lato server

Il controllo lato server di Dynamic Cookie Blocker consente di intercettare i potenziali siti profilatori e quindi bloccarli prima ancora che vengano innestati nella pagina (questa opzione è liberamente attivabile/disattivabile dal pannello delle opzioni del plugin), da ciò ne consegue che se il browser non avesse JavaScript attivo non corre il rischio di caricare comunque contenuti esterni che profileranno l’utente, tuttavia l’operazione di rimozione (per meglio dire trasformazione dell’HTML di partenza) per come attualmente risulta implementata è affetta da un bug, a mio avviso serio (secondo l’autore il bug è presente ma non ci sono stati casi che possano ricadere in questa condizione su nessuno dei siti su cui è installato il plugin), perché se avessimo un codice HTML come riportato nell’esempio che segue si potrebbe avere un comportamento anomalo del plugin.

<object id="my-fake-object">
    ...
</object>
<!-- 
    Questa è un commento in HTML
    questo <object > è un tag intenzionalmente messo per dimostrare
    quanto può essere pericoloso questo approccio.
-->

<p>
    Questo contenuto è totalmente innocuo, eppure verrà rimosso.
</p>

<object id="my-fake-object-2">
    ...
</object>

Ecco un esempio concreto di cosa avviene sul server con un HTML potenzialmente corretto ma con una regola “sbagliata”.

Lato Client

La manipolazione lato client di Bootcooker invece è più accurato per selezione dei tag, infatti tramite una chiamata document.querySelectorAll(“*”) è possibile ottenere l’elenco di tutti i tag ed effettuare la scansione dei riferimenti ai contenuti esterni, bloccando quelli che risultano profilatori. Tuttavia questa operazione rischia di iniettare comunque dei cookie all’utente prima dell’esecuzione dell’ script. Ma supponiamo che comunque lo script riesca effettivamente ad intercettare i contenuti prima ancora che gli stessi siano richiesti al server di terze parti, lo script presenta un problema ulteriore, infatti, per controllare anche i contenuti iniettati a runtime, viene fatto uso dell’oggetto MutationObserver compatibile con quasi tutti i browser più recenti (ad eccezione di qualche browser per dispositivo mobile), compresi Internet Explorer versione 11 ma non è supportato dalle versioni precedenti. C’è da dire che Windows XP non è più supportato e che Windows Vista sarà supportato fino all’11 aprile 2017 e che sembra  essere Internet Explorer 9 l’ultimo supportato da Windows Vista. In compenso Windows 7 ha un pacchetto di installazione per Internet Explorer 11 ed è fornito anche tramite gli aggiornamenti automatici di sistema. Quindi se nelle statistiche del vostro sito web ci sono tanti utenti che utilizzano Internet Explorer in versione precedente alla 11 avranno problemi nel blocco dei contenuti esterni.

Blocco automatico

Si sa, l’utilizzatore spesso è pigro, non ha voglia di configurare il plugin e vorrebbe che il plugin sia in grado da solo di comprendere il da farsi, in ogni contesto. Ebbene, entrambi i plugin offrono un blocco automatico degli elementi potenzialmente profilanti (entrambi bloccano in automatico iframe ed object ed embed mentre Bootcooker include anche i tag img e script nel blocco preventivo) con un approccio abbastanza simile: entrambi bloccano tutto nell’ambito dei tag prima menzionati!

Ed anche in questo approccio ho riscontrato una grave pecca per entrambi i plugin, nessuno dei due preserva i contenuti dello stesso dominio, pertanto se io proprietario dei contenuti video del mio sito, seppur non profilando non potrò avere un object o un iframe che punti al mio stesso dominio.

L’autore del plugin Dynamic Cookie Blocker ha suggerito un workaround per ovviare a questa situaziuone (che a mio avviso è un disagio), iniettando l’iframe, o l’elemento che altrimenti verrebbe bloccato, tramite JavaScript, utilizzando il seguente codice esemplificativo:

document.write('<ifr'+'ame src="..."></iframe>');

Due punti di forza di Bootcooker sono l’inibizione della scrittura dei cookie da JavaScript, utile per evitare che script esterni scrivano tramite JavaScript i maledetti biscottini ed il blocco preventivo dei contenuti per i soli utenti europei che però non posso valutare perché non mi è stata fornita la relativa parte di codice. Se effettivamente così fosse sarebbe (erroneamente) allettante per chi lo acquista. La normativa non dice che bisogna avvisare gli utenti europei, ma che i siti europei debbano comunicare ai propri ospiti l’uso di cookie anche se essi fossero i nostri lontani cugini di oltreoceano. Per ulteriore dettaglio riporto un estratto dal sito della commissione europea:

EUROPA websites must follow the Commission’s guidelines on privacy and data protection and inform users that cookies are not being used to gather information unnecessarily.

The ePrivacy directive – more specifically Article 5(3) – requires prior informed consent for storage for access to information stored on a user’s terminal equipment. In other words, you must ask users if they agree to most cookies and similar technologies (e.g. web beacons, Flash cookies, etc.) before the site starts to use them.

For consent to be valid, it must be informed, specific, freely given and must constitute a real indication of the individual’s wishes.

Refresh all’accettazione

Entrambi i plugin hanno un comportamento eccellente, come richiesto da molti utenti su vari gruppi di discussione, caricando i contenuti omessi in fase iniziale, solo dopo il consenso dell’utente e senza vincolare ad un ricaricamento completo della pagina.

Funzionamento senza JavaScript

La maggior parte delle soluzioni sviluppate per ottemperare alla cd CookieLaw dipende da JavaScript, almeno per la visualizzazione del banner con l’informativa breve. Anche in questo caso nessuno dei due plugin in assenza di JavaScript è in grado di funzionare. Quando scrivo “senza JavaScript” intendo quegli utenti che usufruendo di tecnologie assistive o strumenti alternativi di navigazione che non hanno JavaScript abilitato potrebbero non ricevere l’informativa e non vedere parti del sito in un caso o vedere anche il contenuto profilante nell’altro caso. Entrambi hanno basato il loro funzionamento fortemente su JavaScript.

Infatti, Bootcooker utilizza JavaScript per rimuovere i contenuti (vi rimando alla sezione Blocco Preventivo per ulteriori dettagli) mentre Dynamic Cookie Blocker, utilizza JavaScript per reiniettare i contenuti se c’è stato consenso. Pertanto entrambe le soluzioni non gestiscono “l’assenza di JavaScript”. Dynamic Cookie Blocker come dichiarato sul sito: “Gestisce anche il caso cui l’utente abbia JavaScript disabilitato”. Tuttavia sul sito dimostrativo, con JavaScript disabilitato il comportamento che un utente si aspetterebbe, è di visionare comunque i contenuti senza gli elementi bloccati, invece viene effettuato il redirect ad una pagina statica noscript.html.

Compatibilità con plugin di Cache

Entrambi i plugin dichiarano una completa compatibilità con i vari plugin di cache, analizzando il codice di entrambi i plugin, almeno nella parte che mi è stata fornita, è possibile confermare che l’affermazione è sufficientemente vera.

Infatti il codice prodotto da Dynamic Cookie Blocker è un mix di HTML e JavaScript che verrà elaborato lato client da uno script il quale sarà eseguito per trasformare il JavaScript in HTML originale, se la policy sui cookie è approvata (oppure lo è stata in passato), oppure presentare dei segnaposto (se la policy non è stata approvata). Quindi il codice è effettivamente sempre lo stesso per i client e per i motori di ricerca che navigheranno sul nostro sito. Pertanto, anche il motore di ricerca sarà trattato alla stregua di un utente che non ha accettato la cookie policy.

Dall’altra parte Bootcooker, eseguendo la rimozione dei contenuti tramite JavaScript, non ha problemi di cache, in quanto il contenuto è fornito al client sempre allo stesso modo, sarà cura di JavaScript rielaborare il contenuto della pagina (si rimanda alla sezione Blocco Preventivo – Lato client per maggiori informazioni). Tuttavia pur essendo una soluzione che non influisce sulla cache, il dichiarato controllo degli utenti europei per la presentazione del banner ed il blocco dei contenuti, essendo svolto lato server (non c’è traccia di tale controllo nel JavaScript), potrebbe causarne. A meno che tale verifica non venga effettuata in congiunzione con i controlli svolti sulla pagina dal sistema di cache.

Un esempio: Se un utente americano approda su una pagina (non ancora presente nella cache) del nostro sito, il plugin fornirà il contenuto senza il banner informativo. Se successivamente un utente europeo accede alla medesima pagina (adesso in cache), si troverà il contenuto senza il banner, poiché la pagina in cache risulterà ancora valida.

Ma anche in questo caso sono supposizioni e bisogna basarsi solo sulle dichiarazioni effettuate dall’autore: “Il plugin è a prova di cache, è stato testato su 3 livelli di cache presenti su Siteground insieme al plugin “SuperCacher”

Richiesta di incapsulamento degli elementi da bloccare

I due plugin hanno deciso di gestire la questione in modo completamente differente, Dynamic Cookie Blocker prevede che gli elementi da bloccare (oltre agli opzionali iframe, object e embed bloccati in automatico) siano inglobati tra due commenti, uno di apertura e l’altro di chiusura. Essi possono essere utilizzati nei contenuti di articoli, dele pagine o dei custom post (anche sotto forma di shortcode) e in altri punti della pagina (solo sotto forma di commento). Per quanto l’incapsulamento (wrapping) degli elementi sia fastidioso, perché richiede che l’utente debba modificare eventuali temi e plugin del proprio sito, garantisce il blocco puntuale di parti di codice “esatte”. Ciò torna utile per servizi terzi quali per esempio google Analytics o Google Adsense che si compongono di due parti, una prima parte che prevede l’inclusione di un JavaScript esterno e una seconda parte che è un pezzetto di codice JavaScript nell’HTML della pagina. Infatti identificando solo il JavaScript incluso (la prima parte), nessuno bloccherà l’esecuzione del secondo pezzo di JavaScript che molto probabilmente andrà in errore. Quindi è possibile affermare che incapsulando, e pertanto rimuovendo anche il JavaScript locale, contribuirà a non avere errori di esecuzione dei JavaScript nella pagina.

A prescindere comunque dal funzionamento del plugin e dal loro meccanismo di incapsulamento delle sezioni da bloccare, non è trascurabile che se un utente decide di inserire dei contenuti testuali/immagini (oltre ai tipici pulsanti sociali) nel blocco, potrà incorrere in problemi sull’indicizzazione degli stessi contenuti bloccati, poiché il motore potrebbe ignorare i contenuti generati da JavaScript (ritenuti dinamici).

Al contrario Bootcooker non si aspetta un qualcosa nell’HTML per identificare le parti da bloccare, esso tramite il già descritto MutationObserver che tiene sotto controllo l’intera struttura HTML della pagina e blocca in automatico gli elementi iframe, object, img e script. Però esiste una whitelist nel codice (forse da poter configurare in area amministrativa, ma non mi è possibile verificare questa funzionalità in quanto non dispongo del backend), nella quale indicare l’elenco dei domini da non bloccare.

Configurabilità

Mentre Dynamic Cookie Blocker presenta un’interfaccia di amministrazione abbastanza nutrita di opzioni, dalla quale è possibile scegliere dal colore del banner all’animazione da applicare all’uscita, dalla durata dei cookie alla possibilità di forzare il refresh della pagina e molto altro ancora, Bootcooker presenta solo 5 opzioni (visionando lo screenshot dal sito del prodotto): abilitazione del consenso allo scroll, consenso al click su un elemento della pagina, il testo dell’informativa breve ed un link alla cookie policy.

Supporto al multilingua

Osservando il codice del pannello di controllo di Dynamic Cookie Blocker, si evince che risulta compatibile con WPML e, probabilmente, con altri plugin per la gestione del multilingua. Nella directory languages del plugin risultano dei file di traduzione in diverse lingue (ne ho contate ben 15), alcune lingue sembrano essere parzialmente tradotte mentre il file di template (.pot) non risulta allineato ai file di traduzione. Al contrario Bootcooker invece non ha alcun supporto al multilingua.

Tabella comparativa

Nella tabella che segue ho riportato le voci analizzate in questo articolo con:

  • SI quando è stato possibile verificare la funzionalità,
  • PA quando la funzionalità è parziale o presenta qualche bug/incompatibilità
  • NO per quello che non è supportato dal plugin
  • NV per quello che non è stato possibile valutare
  • ? per le dichiarazioni dell’autore non verificabili da me
  • se non applicabile o se richiesto un intervento manuale esterno al CMS
Bootcooker Dynamic Cookie
Blocker
Banner con informativa breve SI SI
Modalità di accettazione dei cookie
Su pulsante di consenso SI SI
Allo scroll ? SI
Click su qualsiasi elemento ? SI
Blocco preventivo
Lato client PA
Lato server NV PA
Blocco automatico
Per chiunque NV SI
Per gli utenti europei ?
Caricamento dinamico all’accettazione SI SI
Funzionamento senza JavaScript NO NO
Compatibilità con plugin di Cache PA SI
Identificazione elementi da bloccare
tramite incapsulamento NO SI
riconoscimento automatico SI PA
Configurabilità  ? SI
Supporto al multilingua NO SI

Conclusioni

Spero di essere riuscito a fornire un parere imparziale così come promesso, non conosco personalmente l’uno o l’altro autore e li ho aggiunti forse poco più di una settimana fa ai miei contatti Facebook proprio per proporgli la stesura di questo articolo.

Se l’articolo è stato di tuo gradimento puoi valutare di offrirmi una birra o un caffè.


Commenti

2 risposte a “Cookie Law, due plugin per WordPress a pagamento”

  1. […] Plugin Bootcooker a confronto. In questo post puoi analizzare l’utilità di Bootcooker a confronto con un altro plugin: Bootcooker 3.0.0 vs Dynamic Cookie Blocker 3.0>> […]

  2. […] In questo articolo analizzeremo tutte le novità della versione 2.0 e sarà confrontato EUCookieLaw con altre due soluzioni a pagamento. […]