Cookie disclaimer

La RGPD

La RGPD Règlement Général sur la Protection des Données ou GDPR General Data Protection Regulation tente de réguler l’utilisation et le traitement des données personnelles enregistrées par un utilisateur lorsqu’il visite un site web. Une donnée personnelle est une information se rapportant à une personne physique identifiée ou identifiable. Une personne peut être enregistrée sur un site par son nom, un numéro, une adresse email etc… et une quantité non négligeable d’autres informations. Un utilisateur peut, en particulier, être reconnu sur une page web à l’aide de cookies.

Deux biscuits cookies en icone sur fond du parc national du komodo en Indonésie

Les cookies

Les cookies sont des informations stockées sur un ordinateur par un navigateur en relation avec un domaine. Un cookie est composé d’une chaîne de caractère et une valeur, ayant une durée de vie et une taille maximum de 4 Ko. Un site peut vouloir stocker plusieurs cookies tels que le nom, le prénom et autres d’un utilisateur pour améliorer la qualité des services qu’il délivre. Chaque navigateur possède sa propre stratégie de stockage, cela peut être un ou plusieurs fichiers ou une base de données SQLite sur le client. Il est ainsi difficile de retrouver manuellement les informations que contiennent ces cookies, par exemple en navigant avec un explorateur de fichiers. Un cookie est relatif à un navigateur client et un domaine, installé sur une machine cliente.

Un cookie était au début un petit fichier d’une taille maximale de 4 Ko. Un cookie ne peut être lu qu’à partir du domaine d’où il a été émis. Les cookies sont généralement définis dans un en-tête HTTP, mais JavaScript peut également définir un cookie directement dans un navigateur. Javascript est exécuté par le client, il n’y a donc pas de problème pour définir des cookies. PHP et autres langages sont exécutés sur le serveur et ne peuvent en principe pas écrire sur le client. PHP a la fonction setcookie() qui définit un cookie à envoyer au client en utilisant l’API REST des entêtes HTTPHTTP headers. Comme toutes les entêtes, les cookies en PHP doivent être envoyés avant tout affichage de la page, même un espace, ou les balises <html> et <head>.

La RGPD impose de prévenir un utilisateur de la politique de confidentialité et si des cookies sont enregistrés et stockés pendant une session. De plus en plus souvent, les sites préviennent à l’aide d’un avertissement que des cookies peuvent être enregistrés et stockés, et propose à l’utilisateur l’acceptation de cette politique. Le stockage, si l’utilisateur continue la navigation sur le site, sera effectué sur la machine de l’utilisateur, et dépendra du navigateur et du domaine de la page. Les cookies stockés par un navigateur ne seront pas disponibles pour un autre. Certains cookies (la valeur stockée) dépendent d’une session particulière, d’autres non.

Cookies de domaines tierces

Lorsque l’on insère un script de Google Analytics ou de Facebook, des cookies vont être écrits sur l’ordinateur du client. Lorsque l’on insère une iframe, de-même des cookies seront vraisemblablement stockés sur l’ordinateur du visiteur. Ces cookies, réellement écrits dans la machine cliente, ne sont accessibles que par le domaine qui les a générés.

La mauvaise réputation des cookies

Dès leur création, les cookies sont critiqués du fait que les serveurs sauvegardent des données sur l’ordinateur client, mais les avantages ont finalement vaincus les problèmes de confidentialité. Cependant, des failles de sécurité peuvent éventuellement se poser. Les cookies présentent trois types d’attaques majeures :

  • L’homme au milieu Man-in-middle

    Toute requête HTTP passe à travers le web par de multiples nœuds. Les cookies peuvent contenir des informations sur l’identification de l’utilisateur, donc si ces informations sont lues par un tiers, il peut falsifier son identité comme un autre utilisateur. Mais aujourd’hui, les transports de données sont cryptés grâce à l’utilisation généralisée de HTTPS HyperText Transfer Protocol Secure, et il devient quasi impossible de comprendre ces informations.

  • XSS – Cross-site Scripting entre sites

    Il existe deux types d’attaques XSS : Stored XSS et Reflected XSS. Une attaque XSS stockée se produit lorsqu’un script malveillant via l’entrée utilisateur est stocké sur le serveur cible, comme dans une base de données, dans un forum de messages, un journal des visiteurs, un champ de commentaire, … ou inséré via un CDN Content Delivery Network malveillant. Reflected XSS se produit lorsqu’un script malveillant est renvoyé d’un serveur Web vers le navigateur de l’utilisateur. Le script est activé via un lien (sur lequel un utilisateur sans méfiance clique), qui envoie une requête à un site Web avec une vulnérabilité qui permet l’exécution de scripts malveillants.

  • CSRF – Cross-site Request forgery Falsification de requêtes entre sites

    Pendant que l’utilisateur est connecté à un portail sécurisé, il accède à un autre site, créé par un hacker. Là, il exécute une action quelconque en cliquant, par exemple, sur un bouton. Le hacker envoie alors une requête HTTP au portail utilisé par l’utilisateur et usurpe ainsi son identité pour exécuter une action malveillante pendant que sa session est encore active. Pour ce faire, le hacker n’a besoin que de la bonne requête HTTP, un élément qu’il lui est relativement facile de récupérer.

Principe

Le principe du disclaimer réside dans la vérification de l’existence d’un cookie particulier en javascipt. Si ce cookie n’existe pas, on affiche un popup informant l’utilisateur de l’emploi de cookies sur le site. Lorsque l’utilisateur clique sur le bouton OK, on écrit ce cookie en javascript pour le domaine racine avec une certaine durée de vie.

La propriété this.arrow true/false sert à afficher une flèche pour cacher le disclaimer sans écrire de cookie. L’avertissement apparaitra ainsi encore sur les autres pages. Pour que le cookie this.name cookinfo soit écrit, l’utilisateur doit cliquer sur le bouton this.button OK.

Style

Et une petite touche de styles en SCSS, affichage en bas à droite :

Le fichier style généré s’appelle cookinfo.min.css.

Et hop, ainsi on obtient un joli popup d’avertissement, en bas à doite :

Cookies popup disclaimer

Soumettre un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables.