Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Modifications mineures de syntaxe et liens #56

Open
wants to merge 14 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion 00-Développer en conformité avec le RGPD.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 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.
#### 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 :

Expand Down
1 change: 0 additions & 1 deletion 01-Identifier les données personnelles.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@

<details>
<summary> <em> En savoir plus sur les techniques d'anonymisation </em> </summary>
<br>

Le [projet CabAnon](https://linc.cnil.fr/fr/cabanon-un-projet-dexploration-et-de-visualisation-de-donnees-anonymisees), 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](https://linc.cnil.fr/fr/cabanon-quels-usages-pour-les-donnees-anonymisees) 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](https://github.com/LINCnil/Cabanon/tree/master/Anon).
</details>
Expand Down
2 changes: 1 addition & 1 deletion 02-Préparer son developpement.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

#### Architecture et fonctionnalités

* **Intégrez la protection de la vie privée, y compris les exigences de sécurité des données, dès la conception de l’application ou du service**. Ces exigences doivent influer sur les [choix d’architecture](#Fiche_n°5%c2%a0:_Faire_un_choix_éclairé_de_son_architecture) (par exemple décentralisée vs centralisée) ou de fonctionnalités (par exemple anonymisation à bref délai, minimisation des données). Le paramétrage par défaut de l’application doit respecter les exigences minimales de sécurité et être en conformité avec la loi. Par exemple, la complexité par défaut des mots de passe doit respecter à minima la [recommandation de la CNIL relative aux mots de passe](https://www.legifrance.gouv.fr/affichCnil.do?oldAction=rechExpCnil&id=CNILTEXT000033929210&fastReqId=1726469546&fastPos=3).
* **Intégrez la protection de la vie privée, y compris les exigences de sécurité des données, dès la conception de l’application ou du service**. Ces exigences doivent influer sur les [choix d’architecture](#Fiche_n°5%c2%a0:_Faire_un_choix_éclairé_de_son_architecture) (par exemple décentralisée vs centralisée) ou de fonctionnalités (par exemple anonymisation à bref délai, minimisation des données). Le paramétrage par défaut de l’application doit respecter les exigences minimales de sécurité et être en conformité avec la loi. Par exemple, la complexité par défaut des mots de passe doit respecter à minima la [recommandation de la CNIL relative aux mots de passe](https://www.cnil.fr/fr/mots-de-passe-une-nouvelle-recommandation-pour-maitriser-sa-securite).

* **Gardez la maîtrise de votre système**. Il est important de garder la maîtrise de votre système, autant afin d’en assurer le bon fonctionnement que de garantir un haut niveau de sécurité. Garder un système simple permet d’en comprendre précisément les rouages et d’identifier ses points de fragilité. Dans le cas où une certaine complexité est nécessaire, il est conseillé de démarrer d’un système simple, correctement conçu et sécurisé. Ensuite, il est possible d’en augmenter la complexité petit à petit, tout en continuant de sécuriser les nouveautés qui s’ajoutent.

Expand Down
2 changes: 0 additions & 2 deletions 03-Sécuriser son environnement de développement.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@

<details>
<summary> <em>La gestion de clés SSH en pratique</em></summary>
<br>

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.

Expand All @@ -44,7 +43,6 @@ xclip -sel clip < ~/.ssh/key.pub
La clé 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 clés, voir la norme [NISTIR 7966](https://nvlpubs.nist.gov/nistpubs/ir/2015/NIST.IR.7966.pdf).

</details>
<br>

* Favorisez une **authentification forte** sur les services utilisés par l'équipe de développement.

Expand Down
2 changes: 0 additions & 2 deletions 04-Gérer son code source.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,12 @@

<details>
<summary><em> Mise en place d'une authentification forte sur les services de gestion de développement de logiciels </em></summary>
<br>

* Le logiciel libre [GitLab](https://docs.gitlab.com/) offre des fonctionnalités de [double authentification](https://docs.gitlab.com/ee/user/profile/account/two_factor_authentication.html) et [d'accès par jeton d'authentification avec gestion des droits](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html). Ces deux fonctionnalités se retrouvent également sur des services web comme [GitHub](https://help.github.com/en/github/authenticating-to-github/configuring-two-factor-authentication).

* **Pensez à sauvegarder vos codes de récupération dans un endroit sûr**, par exemple un gestionnaire de mot de passe ou conservez leur impression dans un endroit sécurisé.

</details>
<br>

* Par ailleurs, attribuez aux utilisateurs de votre gestionnaire de code source des *niveaux d’accès* à votre projet et définissez pour chacun des niveaux les **permissions** correspondantes (par exemple, un niveau « invité » avec des droits limités en lecture, un niveau « équipe de développement » avec des droits en écriture, etc.).

Expand Down
5 changes: 2 additions & 3 deletions 05-Faire un choix éclairé de son architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,8 @@

<details>
<summary> <em> Quelques exemples d'étude du parcours de la donnée par la CNIL</em> </summary>
<br>

Les packs de conformité sectoriels sur les [compteurs communicants](https://www.cnil.fr/sites/default/files/typo/document/Pack_de_Conformite_COMPTEURS_COMMUNICANTS.pdf), [les véhicules connectés](https://www.cnil.fr/sites/default/files/atoms/files/pack_vehicules_connectes_web.pdf) et [la silver économie](https://www.cnil.fr/sites/default/files/atoms/files/pack_silver_economie_v4.pdf), ainsi que le [livre blanc sur les assistants vocaux](https://www.cnil.fr/sites/default/files/atoms/files/cnil_livre-blanc-assistants-vocaux.pdf) peuvent vous accompagner dans l'identification des parcours de données de votre produit.
Les packs de conformité sectoriels sur les [compteurs communicants](https://www.cnil.fr/sites/cnil/files/typo/document/Pack_de_Conformite_COMPTEURS_COMMUNICANTS.pdf), [les véhicules connectés](https://www.cnil.fr/sites/default/files/atoms/files/pack_vehicules_connectes_web.pdf) et [la silver économie](https://www.cnil.fr/sites/default/files/atoms/files/pack_silver_economie_v4.pdf), ainsi que le [livre blanc sur les assistants vocaux](https://www.cnil.fr/sites/default/files/atoms/files/cnil_livre-blanc-assistants-vocaux.pdf) 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.

Expand All @@ -31,7 +30,7 @@ Ces analyses peuvent vous accompagner dans l'identification des développements

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

* **Choisir un prestataire garantissant la mise en place de mesures de sécurité et de confidentialité appropriées, et suffisamment transparentes**. La CNIL vous propose des [modèles de clauses de confidentialité](https://www.cnil.fr/sites/default/files/typo/document/Recommandations_pour_les_entreprises_qui_envisagent_de_souscrire_a_des_services_de_Cloud.pdf).
* **Choisir un prestataire garantissant la mise en place de mesures de sécurité et de confidentialité appropriées, et suffisamment transparentes**. La CNIL vous propose des [modèles de clauses de confidentialité](https://www.cnil.fr/sites/cnil/files/typo/document/Recommandations_pour_les_entreprises_qui_envisagent_de_souscrire_a_des_services_de_Cloud.pdf).

* **S’assurer de connaître la localisation géographique des serveurs qui vont héberger vos données**. Vous pouvez être amené⋅e à effectuer des transferts de données hors de l’Union européenne (UE) et de l’espace économique européen (EEE). Si les données peuvent circuler librement dans l’UE/EEE, les transferts hors de cet espace sont possibles, à condition d’assurer un [niveau de protection des données suffisant et approprié](https://www.cnil.fr/fr/transferer-des-donnees-hors-de-lue). La CNIL fournit sur site une carte permettant de visualiser les [différents niveaux de protection des données des pays dans le monde](https://www.cnil.fr/fr/la-protection-des-donnees-dans-le-monde).

Expand Down
13 changes: 3 additions & 10 deletions 06-Sécuriser vos sites web, vos applications et vos serveurs.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,12 @@

* **Rendez l’utilisation de TLS obligatoire** pour toutes les pages de votre site et pour vos applications mobiles.

* **Limitez les ports de communication** strictement nécessaires au bon fonctionnement des applications installées. Si l’accès à un serveur web n’est possible qu’à l’aide du protocole HTTPS, seul le ports 443 de ce serveur, et éventuellement le port 80 afin de rediriger vers le protocole HTTPS, doit être accessible sur Internet. Les autres ports doivent alors être bloqués au niveau du pare-feu.
* **Limitez les ports de communication** strictement nécessaires au bon fonctionnement des applications installées. Si l’accès à un serveur web n’est possible qu’à l’aide du protocole HTTPS, seul le port 443 de ce serveur, et éventuellement le port 80 afin de rediriger vers le protocole HTTPS, doit être accessible sur Internet. Les autres ports doivent alors être bloqués au niveau du pare-feu.

* **L’ANSSI a publié sur son site des [recommandations spécifiques](https://www.ssi.gouv.fr/entreprise/bonnes-pratiques/)** pour [mettre en œuvre TLS](https://www.ssi.gouv.fr/entreprise/guide/recommandations-de-securite-relatives-a-tls/) ou [pour sécuriser un site web](https://www.ssi.gouv.fr/uploads/2013/05/anssi-guide-recommandations_mise_en_oeuvre_site_web_maitriser_standards_securite_cote_navigateur-v2.0.pdf).

<details>
<summary> <em> En savoir plus sur la mise en place de TLS</em> </summary>
<br>

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](https://ssl-config.mozilla.org/) supporte par exemple de très nombreux serveurs.

Expand All @@ -28,7 +27,6 @@ Deux exemples de configuration [Apache](annexes/conf_tls_apache.txt) et [Nginx](

<details>
<summary><em>Voir une implémentation Frontend de vérification de force de mot de passe</em></summary>
<br>

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.

Expand All @@ -55,9 +53,8 @@ Cela doit également s'accompagner d'une vérification backend de la force du mo

<details>
<summary><em>Voir des modalités pratiques de hashage des mots de passe</em></summary>
<br>

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.
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 spécifique. 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 :

Expand Down Expand Up @@ -85,7 +82,6 @@ bcrypt.compare(passwordAVerifier, hash, function(err, result) {

<details>
<summary> <em> En savoir plus sur les fonctions de hachage à clé </em> </summary>
<br>

* 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.

Expand Down Expand Up @@ -115,7 +111,7 @@ mot_de_passe_valide = bcrypt.checkpw(mot_de_passe, hache_du_mot_de_passe) #Test

* **Dans le cas où des cookies sont utilisés pour permettre l’authentification**, il est recommandé :

* de protéger les cookies contre des lectures via des canaux de non chiffrées, en forcant l’utilisation d’HTTPS via l’[HSTS](https://fr.wikipedia.org/wiki/HTTP_Strict_Transport_Security), ainsi que par l'utilisation des indicateurs `Secure` et `HttpOnly` ;
* de protéger les cookies contre des lectures via des canaux de non chiffrées, en forçant l’utilisation d’HTTPS via l’[HSTS](https://fr.wikipedia.org/wiki/HTTP_Strict_Transport_Security), ainsi que par l'utilisation des indicateurs `Secure` et `HttpOnly` ;

* d'utiliser des protections contre des [injections de requêtes illégitimes par rebond](https://www.cert.ssi.gouv.fr/information/CERTA-2008-INF-003) (cross-site request forgery ou CSRF) en utilisant des mesures de protection comme le CSRF Token et l'indicateur `SameOrigin` sur les requêtes. L'indicateur `SameSite` des cookies doit avoir la valeur `Strict` lorsque c'est possible ;

Expand Down Expand Up @@ -151,7 +147,6 @@ Concevoir les processus d'authentification, de réinitialisation des mots de pas

<details>
<summary> <em> Choisir et utiliser des outils de détection des vulnérabilités</em> </summary>
<br>

Les **outils de détection des vulnérabilités**, comme [OpenVAS](https://github.com/greenbone/openvas) et [Metasploit](https://github.com/rapid7/metasploit-framework), permettent d'identifier certaines vulnérabilités connus au sein d'applications. Certaines solutions se spécialisent sur des services particuliers, par exemple [Wordpress](https://github.com/wpscanteam/wpscan) ou [Joomla](https://github.com/rezasp/joomscan).

Expand All @@ -162,7 +157,6 @@ Il est recommandé de vérifier l'état et la fraicheur des bases de données de

<details>
<summary> <em> Auditer les ports ouverts en pratique</em> </summary>
<br>

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 :

Expand Down Expand Up @@ -201,7 +195,6 @@ 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.

</details>
<br>

* **Protégez les bases de données que vous rendez accessibles sur Internet**, au moins en restreignant au maximum les accès (par exemple par filtrage IP) et en changeant le mot de passe par défaut du compte administrateur.

Expand Down
2 changes: 0 additions & 2 deletions 07-Minimiser les données collectées.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@

<details>
<summary><em>Exemple d'implémentation de purge automatique en MySQL</em></summary>
<br>

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

Expand All @@ -42,7 +41,6 @@ CREATE EVENT e_mensuel
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.

</details>
<br>

* Afin de garantir un effacement complet, effacez **physiquement** toutes les données qui ne sont plus nécessaires grâce à des outils spécialisés ou en détruisant les supports physiques.

Expand Down
1 change: 0 additions & 1 deletion 08-Gérer les profils utilisateurs.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@

<details>
<summary> <em> Les gestionnaires de mot de passe en pratique </em> </summary>
<br>

* 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.

Expand Down
2 changes: 0 additions & 2 deletions 09-Maîtriser vos bibliothèques et vos SDK.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@

<details>
<summary> <em> Les outils de visualisation des dépendances des applications </em> </summary>
<br>

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_.

Expand All @@ -51,7 +50,6 @@ La visualisation des dépendances des applications compilées, ou "packagées",


</details>
<br>

* **Faites attention aux tentatives de [*typosquattage*](https://fr.wikipedia.org/wiki/Typosquattage) et autres techniques malveillantes.** Vérifiez les noms des dépendances, ainsi que de leurs propres dépendances pour éviter des attaques. Ne copiez-collez pas de lignes de commandes depuis des sites inconnus.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

<details>
<summary> <em> Les outils de documentation intégrés au code </em> </summary>
<br>

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

Expand Down Expand Up @@ -110,7 +109,6 @@ help(Example.do_something)

<details>
<summary> <em> Les outils de mesure de la qualité d'un code </em> </summary>
<br>

Certains langages de programmation disposent d'un **style de programmation standard**, par exemple [PEP8](https://www.python.org/dev/peps/pep-0008/) pour le langage Python. Des outils automatiques peuvent contrôler le respect de ces styles, par exemple [pep8.py](https://pep8.readthedocs.io/en/release-1.7.x/intro.html) 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](https://github.com/SonarSource/sonarqube) ou [checkstyle](https://checkstyle.org/) pour Java.

Expand Down
Loading