Guide RGPD de l'équipe de développement

La CNIL publie un guide RGPD pour les développeuses et développeurs

Afin de vous accompagner dans la mise en conformité de vos développements projet web ou applicatif, la CNIL a élaboré un guide de bonnes pratiques des développements en open source.

Ce guide est publié sous licence GPLv3 et sous licence ouverte 2.0 (explicitement compatible avec CC-BY 4.0 FR). Vous pouvez donc librement contribuer à son enrichissement.

Ce guide s’adresse-t-il uniquement aux développeuses et développeurs ?

Que vous travailliez seul(e) ou en équipe au développement d'un projet, que vous soyez amené(e) à gérer une équipe de développement, que vous soyez un prestataire, ou simplement curieux, ce guide contient une première approche des grands principes du RGPD et des différents points d’attention à prendre en compte dans le déploiement d’applications respectueuse de la vie privée de ses utilisateurs.

Il propose des conseils et des bonnes pratiques, et offre ainsi des clés de compréhension du RGPD utiles pour tous les acteurs, quelle que soit la taille de leur structure. Il peut également faire l’objet d’échanges au sein des services et dans la relation avec vos clients.

Que contient le guide ?

Ce guide est découpé en 18 fiches thématiques et complété par des exemples de codes qui couvrent la plupart des besoins des développeuses et développeurs pour les accompagner à chaque étape de leur projet, de la préparation du développement au déploiement de nouveaux services.

Le règlement général sur la protection des données (ou RGPD) précise que la protection des droits et libertés des personnes physiques exige de prendre des « mesures techniques et organisationnelles appropriées afin de garantir que les exigences du présent règlement sont respectées » (considérant 78).

La détermination de ces mesures est forcément liée au contexte des traitements mis en place, et le responsable de traitement (l'entité publique ou privée qui traite des données personnelles) doit à ce titre assurer la sécurité des données qu'il est amené à traiter.

Les bonnes pratiques de ce guide n’ont donc pas vocation à couvrir l’ensemble des exigences des règlementations ni à être à prescriptives, elles apportent un premier niveau de mesures permettant de prendre en compte les problématiques de protection de la vie privée dans les développements informatiques qui ont vocation à être appliquées à tous les projets traitant des données. En fonction de la nature des traitements opérés, des mesures complémentaires devront être mises en œuvre dans certains cas afin de respecter pleinement la réglementation.

Tables des matières

  1. Développer en conformité avec le RGPD

  2. Identifier les données à caractère personnel

  3. Préparer son développement

  4. Sécuriser son environnement de développement

  5. Gérer son code source

  6. Faire un choix éclairé de son architecture

  7. Sécuriser vos sites web, vos applications et vos serveurs

  8. Minimiser les données collectées

  9. Gérer les profils utilisateurs

  10. Maîtriser vos bibliothèques et vos SDK

  11. Veiller à la qualité de votre code et sa documentation

  12. Tester vos applications

  13. Informer les utilisateurs

  14. Préparer l'exercice des droits des personnes

  15. Gérer la durée de conservation des données

  16. Prendre en compte les bases légales dans l’implémentation technique

  17. Analyser les pratiques en matière de traceurs sur vos sites et vos applications

  18. Mesurer la fréquentation de vos sites web et de vos applications

  19. Se prémunir contre les attaques informatiques

Comment contribuer à ce guide ?

Ce guide est disponible en deux versions :

La contribution se fait en quelques étapes :

Votre proposition de contribution sera examinée par la CNIL avant sa publication. La version web du guide RGPD de l'équipe de développement sera régulièrement mise à jour.

Usage

Pour faire vous-même une « release » de ce repository, vous pouvez utiliser l’outil Pandoc. Cet outil vous permettra de convertir les fiches en un fichier docx ou bien un document HTML.

Vous pouvez retrouver les instructions pour installer cet outil ici

Fiche n°0 : Développer en conformité avec le RGPD

Que vous travailliez seul⋅e ou en équipe au développement d’un projet, que vous soyez amené⋅e à gérer une équipe de développement, ou que vous soyez un prestataire réalisant des développements pour des tiers, il est indispensable de s’assurer durant toute la vie du projet que les données de vos utilisateurs ainsi que toutes les opérations effectuées sur celles-ci soient protégées en permanence.

Les étapes suivantes vous aideront dans le développement d’applications ou de sites web respectueux de la vie privée :

  1. Sensibilisez-vous aux grands principes du RGPD. Si vous travaillez en équipe, nous vous recommandons d’identifier une personne chargée du pilotage de sa conformité. Si votre entreprise dispose d’un délégué à la protection des données (DPO), celui-ci constitue alors un atout majeur pour comprendre et respecter les obligations du RGPD. Sa désignation peut par ailleurs être obligatoire dans certains cas, notamment si vos programmes ou vos applications traitent des données dites « sensibles » (cf. les exemples) à grande échelle ou réalisent un suivi régulier et systématique à grande échelle.

  2. Cartographiez et catégorisez les données et les traitements de votre système. Recenser de façon précise les traitements réalisés par votre programme ou votre application vous aidera à vous assurer qu’ils respectent bien les obligations légales en la matière. La tenue d’un registre des activités de traitement (dont vous trouvez un exemple sur le site de la CNIL), vous permet d’avoir une vision globale sur ces données, d’identifier et de hiérarchiser les risques associés. En effet, des données personnelles peuvent être présentes dans des endroits inattendus comme dans les journaux de serveurs, les fichiers de cache, les fichiers Excel, etc. Sa tenue est obligatoire dans la plupart des cas.

  3. Priorisez les actions à mener. Sur la base du registre des activités de traitement, identifiez en amont du développement les actions à mener pour vous conformer aux obligations du RGPD et priorisez les points d’attention au regard des risques pour les personnes concernées par la collecte de données. Ces points d’attention concernent notamment la nécessité et les types de données collectées et traitées par votre programme, la base légale sur laquelle se fonde vos traitements de données, les mentions d’information de votre programme ou de votre application, les clauses contractuelles vous liant à vos sous-traitants, les modalités d’exercice des droits, les mesures mises en place pour sécuriser vos traitements.

  4. Gérez les risques. Lorsque vous identifiez que des traitements de données personnelles sont susceptibles d’engendrer des risques élevés pour les personnes concernées, assurez-vous que vous gérez ces risques de façon appropriée au regard du contexte. Une analyse d’impact relative à la protection des données (AIPD) peut vous accompagner dans la maîtrise de ces risques. La CNIL a élaboré une méthode, des modèles de documents et un outil qui vous aideront à identifier ces risques ainsi qu’un catalogue de bonnes pratiques qui vous accompagnera dans la mise en place de mesures permettant de traiter les risques identifiés. Par ailleurs, la réalisation d’une analyse d’impact relative à la protection des données est obligatoire pour tous les traitements susceptibles d’engendrer des risques élevés pour les droits et libertés des personnes concernées. La CNIL propose, sur son site web, une liste des types d’opérations de traitement pour lesquelles une AIPD est requise ou, au contraire, non requise.

  5. Organisez des processus internes pour vous assurer d’être en conformité durant toutes les étapes du développement, veillez à ce que des procédures internes garantissent la prise en compte de la protection des données sur tous les aspects de votre projet et prenant en compte l’ensemble des événements qui peuvent survenir (ex. : faille de sécurité, gestion des demandes de rectification ou d’accès, modification des données collectées, changement de prestataire, violation de données, etc.). Les exigences du label gouvernance (même si celui-ci n'est plus octroyé par la CNIL depuis l’entrée en application du RGPD) peuvent constituer une base d’inspiration utile pour vous aider à mettre en place l’organisation nécessaire.

  6. Documentez la conformité de vos développements pour prouver votre conformité au RGPD à tout moment : les actions réalisées et les documents produits à chaque étape du développement doivent être maîtrisés. Cela implique notamment un réexamen et une actualisation réguliers de la documentation de vos développements afin qu’elle soit en permanence en cohérence avec les fonctionnalités déployées sur votre programme.

Le site de la CNIL fournit de nombreuses fiches pratiques qui vous accompagneront dans la mise en place de traitements respectueux de la loi suivant votre secteur d’activité.

Fiche n°1 : Identifier les données à caractère personnel

Comprendre les notions de « données personnelles », de « finalité » et de « traitement » est indispensable pour le développement d’une application respectueuse de la loi et des données des utilisateurs. Attention, à ne pas confondre « anonymisation » et « pseudonymisation » qui ont des définitions précises dans le RGPD.

Définition

Exemples de données à caractère personnel

L’anonymisation des données à caractère personnel

En savoir plus sur les techniques d'anonymisation

Le projet CabAnon, développé par le Laboratoire d'Innovation Numérique de la CNIL en 2017, évalue les performances de différentes techniques d’anonymisation sur des trajets des taxis tels que rendus publics par la New-York TLC. Ce projet présente différents scénarios d’usages pour lesquels les techniques d'anonymisation utilisées n’altèrent pas significativement la qualité du résultat final. Le code utilisé pour anonymiser ces données est également publié sous licence libre.

La pseudonymisation des données à caractère personnel

Fiche n°2 : Préparer son développement

Les principes de la protection des données à caractère personnel doivent être intégrés aux développements informatiques dès les phases de conception afin de protéger la vie privée des personnes dont vous allez traiter les données, et de leur offrir une meilleure maîtrise de leurs données et de limiter les erreurs, pertes, modifications non autorisées, ou mauvais usages de celles-ci dans les applications.

Choix méthodologiques

Choix technologiques

Architecture et fonctionnalités

Outils et pratiques

Fiche n°3 : Sécuriser son environnement de développement

La sécurité des serveurs de production, de développement, d'intégration continue ainsi que les postes de travail des développeuses et développeurs doit être une priorité car ils centralisent l'accès à un grand nombre de données.

Évaluez vos risques et adoptez les mesures de sécurité adéquates

Sécurisez vos serveurs et vos postes de travail d'une façon homogène et reproductible

Maîtrisez vos accès et tracez les opérations

La gestion de clés SSH en pratique

Si vous devez vous connecter à un service en ligne ou à l'un de vos serveurs, faites le choix d'algorithme asymétriques, ECDSA ou bien RSA.

Par exemple en utilisant l'outil ssh-keygen (disponible sous linux et OSX), utiliser les commandes :

ssh-keygen -t ed25519

Cette commande va créer ou utiliser votre répertoire de clés SSH, par exemple sur Linux /home/username/.ssh/), et y écrire deux éléments : une clef privée et une clef publique.

Vous pouvez alors soit envoyer la clé publique au serveur pour le configurer (si vous avez un moyen d'authentification préexistant), soit la copier dans votre presse-papier pour la fournir au servir que vous souhaitez utiliser :

#Pour envoyer :
ssh-copy-id -i ~/.ssh/key.pub user@host
#Pour copier sur des systèmes Debian ou Ubuntu:
sudo apt install xclip
xclip -sel clip < ~/.ssh/key.pub

La clef privée ne doit jamais être envoyée ou partagée avec un tiers. Pour plus d'info sur les mesures organisationnelles à mettre en place pour une bonne gestion des clefs, voir la norme NISTIR 7966.


Fiche n°4 : Gérer son code source

Quelle que soit l’ampleur de votre projet, il est très fortement recommandé d’utiliser un outil de gestion de code source pour suivre dans le temps ses différentes versions.

Paramétrez efficacement votre gestionnaire de code source, en pensant à sa sécurité

Mise en place d'une authentification forte sur les services de gestion de développement de logiciels


Soyez vigilant sur le contenu de votre code source

Exemples d’outils

Fiche n°5 : Faire un choix éclairé de son architecture

Lors de la conception de l’architecture de votre application, vous devez identifier les données personnelles qui seront collectées et définir un parcours et un cycle de vie pour chacune d’entre elles. Le choix des supports de données (stockage local, serveur, service cloud) est une étape cruciale, qui doit être adaptée à vos besoins, mais aussi à vos connaissances techniques. Le registre des activités de traitement et une analyse d’impact peuvent vous accompagner dans ce choix.

Étudier le parcours de ses données

Quelques exemples d'étude du parcours de la donnée par la CNIL

Les packs de conformité sectoriels sur les compteurs communicants, les véhicules connectés et la silver économie, ainsi que le livre blanc sur les assistants vocaux peuvent vous accompagner dans l'identification des parcours de données de votre produit.

Chaque cas d'usage met ainsi en œuvre des parcours distincts pour lesquels la création d'un compte et l'intervention d'un ou plusieurs acteurs externes peuvent être nécessaires.

La conformité de ces parcours est étudiée suivant 3 étapes :

  • l'identification du traitement, du responsable et de sa base légale,
  • l'identification des données collectées ainsi que de leur durée de conservation,
  • l'information et la garantie des droits des personnes concernées.

Ces analyses peuvent vous accompagner dans l'identification des développements à prévoir, suivant les caractéristiques du traitement, la base juridique applicable et l'identification des données qui nécessitent une attention particulière du fait de leur caractère sensible.

En cas de recours à un prestataire pour l’hébergement

Fiche n°6 : Sécuriser vos sites web, vos applications et vos serveurs

Tout site web, application ou serveur doit intégrer les règles élémentaires de sécurité à l’état de l’art, tant sur les communications que sur les authentifications ou son infrastructure.

Sécuriser les communications

En savoir plus sur la mise en place de TLS

La sécurisation des communications des sites et applications mobiles nécessite d'utiliser le protocole "TLS". La combinaison de ce protocole avec le protocole "HTTP" permet un échange par "HTTPS". Certains algorithmes cryptographiques employés dans TLS, et ses versions précédentes "SSL", sont réputées vulnérables à différentes attaques. Vous pouvez vous faire accompagner dans le choix de ces algorithmes au moyen de générateurs de configuration TLS. Celui de Mozilla supporte par exemple de très nombreux serveurs.

Deux exemples de configuration Apache et Nginx commentés sont disponibles en annexe de ce guide. Vous pouvez vous référer au Wiki Mozilla pour plus de détails.

Sécuriser les authentifications

Voir une implémentation Frontend de vérification de force de mot de passe

Dans sa délibération du 10 janvier 2017 portant adoption d'une recommandation relative aux mots de passe, la CNIL spécifie que si le mot de passe n'est pas utilisé en conjonction avec un second facteur, et sans blocage de fréquence ("frequency capping"), un mot de passe devrait être constitué de 12 caractères et comprendre majuscule, minuscule, chiffres et caractères spéciaux.

En conséquence, pour vérifier l'adhérence à ces règles, le code suivant est adéquat :

function checkPassword(pass) {
    if (!pass)
        return false;
    var expectations = [
        /\d/.test(pass),
        /[a-z]/.test(pass),
        /[A-Z]/.test(pass),
        /\W/.test(pass),
        pass.length>=12
    ];
    return !expectations.includes(false);
}

Cela doit également s'accompagner d'une vérification backend de la force du mot de passe.

Voir des modalités pratiques de hashage des mots de passe

Il ne faut jamais stocker les mots de passe des utilisateurs en clair dans vos bases de données, il faut systématiquement les hasher, avec un sel specifique. En pratique, bcrypt est sans doute la solution la plus simple d'utilisation. Elle utilise un sel aléatoire pour chaque hash et l'inclue dans le hash résultant pour la vérification d'un mot de passe.

Par exemple en node.js :

#Pour installer:
npm install bcrypt
#Pour utiliser:
const bcrypt = require('bcrypt');
const saltRounds = 10; // Niveau de difficulté de bcrypt
#Enregistrer un mot de passe en DB
const passwordAStocker = '*********';
bcrypt.genSalt(saltRounds, function(err, salt) {
    bcrypt.hash(passwordAStocker, salt, function(err, hash) {
        // stockez le résultat 'hash' en DB
    });
});
#Verifier un mot de passe
const passwordAVerifier = '*********';
bcrypt.compare(passwordAVerifier, hash, function(err, result) {
    // 'result' vaut true si le mot de passe est le bon
});

En savoir plus sur les fonctions de hachage à clé

  • Les fonctions de hachage permettent d’assurer l’intégrité des données. Elles doivent reposer sur un algorithme reconnu et sûr. La famille de fonctions SHA-2 (par exemple SHA-256 et SHA-512) comporte des fonctions de hachage génériques qu’il ne faut pas utiliser directement pour certaines tâches spécifiques.En revanche, elles sont tout à fait acceptables comme fonction de base pour des fonctions de hachage spécialisées. Par exemple, la fonction HMAC utilisée avec SHA-256 ou SHA-512 est adaptée à la signature numérique.

  • Pour stocker les mots de passe, les fonctions adaptées sont les suivantes : Argon2, yescrypt, scrypt, balloon, bcrypt et, dans une moindre mesure, PBKDF2. À noter que les fonctions balloon et PBKDF2 peuvent êtres utilisées avec plusieurs fonctions de hachage sous-jacentes, le choix devant donc être fait sur une fonction reconnue (par exemple une fonction des familles SHA-2, SHA-3, Blake2 ou Blake3).

  • N'utilisez jamais d'algorithmes obsolètes, comme les chiffrements DES et 3DES ou les fonctions de hachage MD5 et SHA1. Leur utilisation peut permettre à un attaquant ayant connaissance du mot de passe haché de déchiffrer celui-ci sans difficulté et en un temps très court.

  • Les fonctions de hachage à clé permettent de rendre le calcul de l’empreinte différent en fonction de la clé utilisée. Pour deux clés différentes l’empreinte obtenue sur un même message sera différente.

  • Utilisez des tailles de clés suffisantes, au minimum de 128 bits suivant l'algorithme utilisé. Protégez ces clés secrètes, au minimum par la mise en œuvre de droits d’accès restrictifs et d’un mot de passe sûr.

  • Rédiger une procédure indiquant la manière dont les clés vont être gérés en prenant en compte les cas d’oubli de mot de passe de déverrouillage.

  • Par exemple, le code Python suivant permet de générer un sel aléatoire et un haché d'un mot de passe ainsi que de vérifier la validité de celui-ci depuis la bibliothèque bcrypt :

import bcrypt #importation de la bibliothèque bcrypt

sel = bcrypt.gensalt() #Génération d'un sel aléatoire à conserver de manière sécurisée

hache_du_mot_de_passe = bcrypt.hashpw(mot_de_passe, sel) #Génération du hachage du mot de passe avec le sel généré

mot_de_passe_valide = bcrypt.checkpw(mot_de_passe, hache_du_mot_de_passe) #Test de la validité du mot de passe depuis son haché

Limiter la divulgation d’information sur les comptes existants

Concevoir les processus d'authentification, de réinitialisation des mots de passe et de création de compte de manière à ce qu'un attaquant ne puisse savoir si une adresse mail spécifique possède un compte utilisateur.

Sécuriser les infrastructures

Choisir et utiliser des outils de détection des vulnérabilités

Les outils de détection des vulnérabilités, comme OpenVAS et Metasploit, permettent d'identifier certaines vulnérabilités connus au sein d'applications. Certaines solutions se spécialisent sur des services particuliers, par exemple Wordpress ou Joomla.

Il est recommandé de vérifier l'état et la fraicheur des bases de données des vulnérabilités. Ces analyses peuvent également nuire au bon fonctionnement des serveurs, elles sont donc plutôt à réaliser sur des environnements en préproduction.

Auditer les ports ouverts en pratique

La commande netstat permet de lister les ports TCP ou UDP ouverts sur un serveur. Sur l'exemple suivant, les ports standards HTTP, HTTPS et SSH d'un serveur sont ouverts vers l'extérieur, un serveur de base de données (MariaDB) est en écoute local et des tentatives connexions sont en cours sur les ports SSH et HTTPS :

$ netstat -alpe --ip
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name
tcp        0      0 localhost:mysql         0.0.0.0:*               LISTEN      mysql      14492      -
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN      root       50278      -
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      root       12948      -
tcp        0      0 0.0.0.0:https           0.0.0.0:*               LISTEN      root       50280      -
tcp        0      0 mon-serveur.fr:https adresse1.fr:38056 TIME_WAIT   root       0          -
tcp        0      0 mon-serveur.fr:ssh adresse2.com:45302  TIME_WAIT   root       0          -
tcp        0      0 mon-serveur.fr.:https adresse3.eu:56277 FIN_WAIT2   root       0          -
tcp        0      0 mon-serveur.fr:https adresse4.be:56306 ESTABLISHED www-data   380689     -
tcp        0    524 mon-serveur.fr:ssh adresse1.fr:65137 ESTABLISHED root       382490     -

Le logiciel Nmap permet de réaliser cette analyse depuis un réseau de communication. Sur l'exemple suivant, le protocole d'administration SSH du serveur est accessible sur Internet.

$ nmap mon-serveur.fr
Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-11 18:13 CEST
Nmap scan report for mon-serveur.fr
Host is up (0.011s latency).
Not shown: 997 filtered ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 4.99 seconds

Il nécessite donc une attention particulière, comme l'utilisation d'une authentification forte et/ou d'un filtrage par IP.


Fiche n°7 : Minimiser les données collectées

Vous ne devez collecter que les données personnelles qui sont adéquates, pertinentes et nécessaires au regard des finalités de votre traitement telles que définies au moment de la collecte.

Avant la collecte, pensez aux différents types de données que vous devez collecter et essayez de restreindre votre collecte au strict nécessaire

Une fois les données collectées, mettez en place des mécanismes d’effacement automatique

Exemple d'implémentation de purge automatique en MySQL

En MySQL, l'event scheduler permet de supprimer les données périmées automatiquement. Par exemple :

CREATE EVENT e_mensuel
    ON SCHEDULE
      EVERY 30 DAY
    COMMENT 'supprime automatiquement les lignes inscrites de plus d un an'
    DO
      BEGIN
        DELETE from votreTable
            WHERE datediff(now(), votreTable.votreColonneDate) > 365;
      END

Son pré-requis est d'associer une date d'inscription à chacune des lignes de la base de données afin de permettre le calcul de sa date de péremption.


Fiche n°8 : Gérer les utilisateurs

La manière de gérer les profils de vos collaborateurs et de vos utilisateurs finaux doit être pensée en amont de vos développements. Elle consiste à définir différents profils d’accès et d’habilitation afin que chaque personne ne puisse accéder qu’aux seules données dont il a effectivement besoin.

Les bonnes pratiques de gestion des utilisateurs

Fluidifier la gestion des profils d’habilitation

Les gestionnaires de mot de passe en pratique

  • Les gestionnaires de mots de passe permettent de centraliser l'ensemble des identifiants et des mots de passe dans une base de données unique. Certains d'entres permettent également de tester la robustesse des mots de passe et d'en générer automatiquement et de manière aléatoire tout en répondant aux contraintes imposées par les systèmes. Assurez-vous avant tout usage que les mots de passes conservées par le logiciel sont chiffrés et protégés par un mot de passe suffisamment robuste.

  • Le gestionnaire de mots de passe libre KeePass, dans sa en version 2.10, a obtenu la Certification de Sécurité de Premier Niveau (CSPN) de l'ANSSI.

  • Les gestionnaires de mots de passe intégrés aux navigateurs sont particulièrement exposés aux vulnérabilités des sites, par exemple les attaques de type Cross Site Scripting (XSS) ou Cross-Site Request Forgery (CSRF). La fiche 18 Se prémunir contre les attaques informatiques illustre en détail le fonctionnement de cette attaque.

Fiche n°9 : Maîtriser vos bibliothèques et vos SDK

Vous utilisez des bibliothèques, kits de développement (« SDK » en anglais), ou d’autres composants logiciels écrits par des tiers ? Voici quelques conseils pour intégrer ces outils tout en gardant la maîtrise de vos développements.

Faire un choix éclairé

Évaluer les éléments choisis

Les outils de visualisation des dépendances des applications

Les gestionnaires de dépendances intègrent des fonctionnalités de suivi et d'audit. A titre d'exemple, la commande npm audit affiche un rapport des vulnérabilités connues de chaque dépendance d'un projet node.js.

La visualisation des dépendances des applications compilées, ou "packagées", nécessitent des outils plus élaborés. En voici quelques exemples :

  • L'association Exodus Privacy met librement à disposition la plateforme d'analyse des applications Android εxodus.

  • L'outil otool liste les dépendances des bibliothèques d'applications macOS et iOS.

  • L'outil dependency-cruiser affiche sous forme de graphique les dépendances de projet javascript.


Maintenir les bibliothèques et SDK

Ressources utiles

Fiche n°10 : Veiller à la qualité de votre code et sa documentation

Il est indispensable d’adopter au plus tôt une bonne hygiène d’écriture de code. Une bonne lisibilité de votre code permettra de réduire l’effort de maintenance, d’audit et de corrections des bogues dans le temps, que vous, vos collaborateurs ou vos futurs contributeurs devront fournir.

Documentez le code et l’architecture

Les outils de documentation intégrés au code

Certains systèmes de documentation utilisent le code lui-même comme support. La documentation est ainsi écrite directement dans les commentaires du programme.

Doxygen, par exemple, offre une syntaxe permettant de générer de la documentation, qui est compatible avec les langages de programmation les plus utilisés. L'exemple suivant est une classe C++ commentée suivant son paradigme :

//!  Une classe d'exemple
/*!
  Description plus approfondie de la classe.
  (Et n'oubliez pas de documenter sans mettre de descriptions génériques dans votre projet.)
*/
 
class Example
{
  public:

    //! Le constructeur de la classe
    /*!
      Description plus approfondie du constructeur.
    */
    Example();
 
    //! Le destructeur de la classe.
    /*!
      Description plus approfondie du destructeur.
    */
    virtual ~Example();
    
    //! Une méthode qui fait quelque chose
    /*!
      \param param1 un paramètre important
      \param param2 un deuxième paramètre aussi important
      \return le résultat qui dépend des deux paramètres et de l'état interne de l'instance
    */
    int doSomething(int param1, const char *param2);
   
    //! Une variable membre publique
    /*!
      Description plus approfondie de la variable membre.
    */
    int attr_;
};

Certains langages de programmation supportent également nativement l'utilisation des commentaires pour documenter du code. Par exemple, les "docstrings" en Python :

class Example:
  """Une classe d'exemple
  Description plus approfondie de la classe.
  """
  
  def __init__(self):
    """Le constructeur de la classe
    Description plus approfondie du constructeur.
    """
    self.attr = None
  
  def do_something(self, param1, param2):
    """Une méthode qui fait quelque chose
    param1: un paramètre important
    param2: un deuxième paramètre aussi important
    return: le résultat qui dépend des deux paramètres et de l'état interne de l'instance
    """
    [...]
    return result
    
help(Example)
# affiche la documentation complète de la classe, qui est générée en partie à partir des docstrings
help(Example.do_something)
# affiche uniquement la documentation de la méthode

Contrôlez la qualité de votre code et de sa documentation

Les outils de mesure de la qualité d'un code

Certains langages de programmation disposent d'un style de programmation standard, par exemple PEP8 pour le langage Python. Des outils automatiques peuvent contrôler le respect de ces styles, par exemple pep8.py pour la PEP8. Pour les langages ne disposant pas de styles de programmation standard, différents styles ont été créés, avec des outils automatiques permettant de les vérifier, par exemple SonarQube ou checkstyle pour Java.

Des outils de qualité de code plus généraux peuvent détecter un certain nombre de problèmes : variables non utilisées ou non définies, duplication de code, etc. Par exemple ESLint pour Javascript ou Clippy pour Rust.

Enfin, des outils d'analyse statique permettent une analyse plus fine du code, afin d'évaluer son comportement sans pour autant exécuter le programme, par exemple SpotBugs pour Java ou Frama-C pour le C.

Fiche n°11 : Tester vos applications

Tester son produit permet de vérifier son bon fonctionnement, de s’assurer d’une bonne expérience utilisateur ainsi que de trouver et prévenir des défauts avant sa mise en production. Tester son produit permet également de réduire les risques d’atteinte aux données personnelles.

Automatisez les tests

Mise en œuvre de systèmes d'intégration continue

  • Les logiciels d'intégration continue permettent d'automatiser les vérifications de code et d'y associer des métriques à chaque modification de code source. Cette pratique vise à détecter les problèmes d'intégration au plus tôt dans le stade de développement comme des modifications à la mise en production.

  • Des solutions propriétaires et libres existent pour interfacer cette automatisation avec les outils de gestion de code source, entre autres Jenkins et GitLab CI/CD.

  • Une attention particulière doit être portée sur la sécurisation de ce type de solution. Veillez notamment à ce que la solution dispose pas d'accès privilégiés au gestionnaire de code source ou aux systèmes les hébergeant.


Intégrez les tests dans votre stratégie d’entreprise

Attention aux données de test !

Les outils de génération de données fictives

Lors du développement de votre service, il est toujours préférable d'utiliser des données fictives. A défaut, les environnement des tests doivent faire l’objet des mêmes mesures de sécurité que l’environnement de production.

La génération de données fictives peut se faire au travers d'outils construits pour tester vos services en générant des données variées et parfois inattendues. Par exemple, en python, la librairie Faker permet simplement de générer de nombreux types de données :

from faker import Faker
# Définit une instance localisée en France
fake = Faker("fr_FR")
# Numéro de téléphone
fake.phone_number()
# '+33 3 38 24 21 94'
# Adresse email
fake.ascii_email()
# 'lorraineboutin@live.com'
# Numéro de carte de crédit
fake.credit_card_number()
# '180009753513939'
# IBAN
fake.iban()
# 'FR05660487647593824219489241'


Fiche n°12 : Informer les personnes

Le principe de transparence du RGPD exige que toute information ou communication relative au traitement de données à caractère personnel soit concise, transparente, compréhensible et aisément accessible en des termes simples et clairs.

Qui informer et quand le faire ?

Quelles informations dois-je donner ?

Sous quelle forme dois-je fournir ces informations ?

Forme et contenu de l'information à délivrer

  • L’information des personnes est fondamentale car elle permet aux personnes de comprendre l’objectif du traitement et l’utilisation de leurs données. La transparence ainsi offerte sur le traitement est l’un des principaux vecteurs pour instaurer une relation de confiance avec les personnes, en leur permettant notamment d’exercer leurs autres droits.

  • Les méthodes et techniques choisies pour rendre l’information accessible peuvent varier en fonction du contexte et des modalités d’interaction avec les personnes : pop-in, bulles, pages dédiées, QR code, messages audio, vidéos, panneaux d’affichage, documentation papier, campagne d’information, etc.

  • De plus, le moment de présentation de l’information est crucial : il faut veiller à faire en sorte qu’elle soit délivrée « à froid » pour que la personne en prenne pleinement connaissance. Une information claire donnée en amont d’un acte d’achat ou de souscription et, à l’inverse, en aval après un temps d’appropriation du service sont ainsi généralement plus accessibles et mieux prises en compte qu’une information placée au moment où la personne vient de décider d’acheter ou de souscrire car elle est généralement soumise à un biais de confirmation à ce moment-là.

  • Le site Données & Design développe ces concepts et fournit des exemples d’interfaces et d'informations permettant de faciliter la compréhension du traitement. Le site de la CNIL comprend également des exemples de notices d’information à plusieurs niveaux d'information à adapter ou à adapter suivant le contexte de votre traitement.

Quelle communication effectuer lorsque la sécurité des données est compromise ?

Ressources utiles

Fiche n°13 : Préparer l’exercice des droits des personnes

Les personnes dont vous traitez les données ont des droits sur ces données : droit d’accès, de rectification, d’opposition, d’effacement, à la portabilité et à la limitation du traitement. Vous devez leur donner les moyens d’exercer effectivement leurs droits et prévoir dans vos systèmes informatiques les outils techniques qui permettront la bonne prise en compte de leurs droits.

Préparer en amont la façon dont ils vous contacteront et dont vous traiterez leurs demandes vous permettra de gérer efficacement l’exercice de ces droits.

Les mesures minimales à mettre en place

Voici quelques exemples de droits et leur possible implémentation

L'exercice de droit en pratique

  • Lorsqu’une personne souhaite exercer un droit, elle doit pouvoir savoir vers qui s’adresser de façon simple. Les informations de contact doivent être facilement accessibles et être localisées à des endroits paraissant logiques, par exemple dans le compte utilisateur, dans des informations contextuelles, les politiques de confidentialité, les politiques de vie privée, une FAQ, etc.

  • L’exercice d’un droit peut constituer un événement exceptionnel dans le parcours utilisateur classique d’un service. De fait, il est d’autant plus important de bien la guider dans cette démarche qui peut paraître intimidante : proposer des étapes simples pour formuler une demande, rappeler l’utilité des droits et des résultats attendus, mettre à disposition des modèles de demande pour faciliter les démarches.

  • L’exercice d’un droit peut s’effectuer par différentes modalités et différents formats: formulaire, mail, comptes en ligne, courrier. Le site Données & Design fournit des exemples d’interfaces pour faciliter les exercices de droits.

  • Tout au long du processus d’exercice des droits, il est important de veiller à ce que la personne soit informée de l’évolution de sa demande. Lui faire des retours régulièrement, pour attester de la bonne réception de sa demande ou encore pour lui faire des retours sur les décisions prises suite à celle-ci, dans un format accessible et correspondant à celui avec lequel elle vous a contacté est donc nécessaire.

  • Afin d’assurer à la personne une bonne continuité dans sa démarche d’exercice de droit, ou en cas de contestation de sa part de la décision que vous prenez auprès d’une autorité de protection, il est recommandé de permettre à la personne de pouvoir garder facilement une trace de sa démarche. Un système d’impression de demandes, d’archivage ou de téléchargements des échanges, etc. peuvent ainsi être mis en place.

En conclusion

Fiche n°14 : Gérer la durée de conservation des données

Les données personnelles ne peuvent pas être conservées pour une durée indéfinie : celle-ci doit être définie en fonction des objectifs poursuivis par le traitement. Une fois cet objectif atteint, ces données devraient être archivées, supprimées ou anonymisées (par exemple afin de produire des statistiques).

Les cycles de conservation des données

Quelques exemples de durée de conservation

Fiche n°15 : Prendre en compte les bases légales dans l’implémentation technique

Pour pouvoir être mis en œuvre, les traitements de données personnelles doivent se fonder sur l’une des « bases légales » mentionnées à l’article 6 du RGPD. La base légale d’un traitement est en quelque sorte la justification de l’existence même du traitement. Le choix d’une base légale va directement impacter les conditions de mise en œuvre du traitement et les droits des personnes. Ainsi, prévoir en amont d’un développement les bases légales des traitements prévus dans le projet vous permettra d’intégrer au mieux les fonctions nécessaires à la conformité à la loi de ces traitements et au respect des droits des personnes.

Définition des bases légales prévues par le RGPD

Choisir la base légale adéquate

Les exercices des droits et les modalités d’information à prévoir suivant la base légale

Droit d’accès Droit de rectification Droit à l’effacement Droit à la limitation du traitement Droit à la portabilité Droit d’opposition
Consentement retrait du consentement
Contrat
Intérêt légitime *
Obligation légale ✔**
Intérêt public
Intérêts vitaux

* Lorsque votre traitement est fondé sur l’intérêt légitime, vous devrez également indiquer les intérêts légitimes poursuivis (lutte contre la fraude, sécurité du système, etc.)

** Lorsque votre traitement est fondé sur l’obligation légale, le droit à l’effacement peut s’appliquer si le traitement répond aux conditions suivantes :

  1. les données à caractère personnel ne sont plus nécessaires au regard des finalités pour lesquelles elles ont été collectées ou traitées d'une autre manière; ou

  2. les données à caractère personnel ont fait l'objet d'un traitement illicite; ou

  3. les données à caractère personnel doivent être effacées pour respecter une obligation légale qui est prévue par le droit de l'Union ou par le droit de l'État membre auquel le responsable du traitement est soumis.

Fiche n°16 : Analyser les pratiques en matière de traceurs sur vos sites et vos applications

La directive européenne ePrivacy requiert le consentement de l’utilisateur avant toute action visant à stocker des informations - via des cookies, identifiants ou autres traceurs (empreintes logiciels, pixels) - ou à accéder à des informations stockées dans l’équipement terminal de l’utilisateur. Afin de se conformer à ses obligations, tout éditeur de site ou d'application doit analyser ses pratiques en terme d'usage des traceurs selon les principes présentés ci-après.

Les traceurs visés par l'obligation du recueil du consentement préalablement à leur usage

Les traceurs qui ne sont pas visés par ces obligations

En pratique

Fiche n°17 : Mesurer la fréquentation de vos sites web et de vos applications

La gestion d’un site web ou d’une application mobile requiert généralement l’utilisation de statistiques de fréquentation ou de performance. Utilisant des cookies ou d’autres traceurs, ils peuvent être exemptés de consentement sous certaines conditions.

Bénéficier de l’exemption de consentement

En pratique

Fiche n°18 : Se prémunir contre les attaques informatiques

La destruction, la perte, l'altération, ou la divulgation non autorisée de données à caractère personnel transmises, conservées ou traitées par un organisme constituent une violation de données personnelles. En tant que développeuse ou développeur, vous êtes tenu•e•s de mettre en œuvre toutes les mesures nécessaires dans vos applications pour prévenir les attaques ou les négligences pouvant entrainer de telles violations.

Cette fiche dresse une liste non-exhaustive de vulnérabilités ayant conduit à des violations de données notifiées à la CNIL. Elle liste des exemples de mesures qui auraient permis de les éviter.

Manipulation d'URL

Ressources :

Bourrage d’identifiants (“Credential stuffing”)

Ressources :

Attaques par force brute et par dictionnaire

Ressources :

Injection de code indirecte (“Cross-Site Scripting”/XSS)

Ressources :

Injection SQL (SQLi)

Ressources :

Les programmes malveillants et les rançongiciels

Ressources :