Sécuriser ses données

Toute programmation de plateforme web a forcément des données sensibles qu’il faut mettre en sécurité pour éviter les piratages. C’est une compétence à part entière, mais on peut, dès le début d’un projet, sécuriser le minimum !

Dans cette page tu trouveras :

Les variables d’environnement

Qu’est-ce qu’une variable d’environnement ?

C’est une valeur stockée dans le système, en dehors du code, que ton programme peut lire, sans les écrire directement dans le programme. Cela permet de sécuriser tes données afin qu’on ne les retrouve pas dans ton code.

Elle sert à stocker des infos comme :

  • URL de base de données
  • Mots de passe
  • Clés API
  • Config serveur
  • Modes debug

Prenons l’exemple de notre base de données :

Quand on travaille avec une base de données, il est très important de ne pas écrire directement ses identifiants dans le code.
Pour cela, on utilise un fichier .env qui permet de stocker les informations sensibles à part.

Créer un fichier .env

À quoi sert le fichier .env ?

  1. Stocker l’URL de connexion à MongoDB
  2. Protéger le mot de passe
  3. Éviter de publier ces infos sur GitHub
  4. Pouvoir changer de base sans modifier le code

Le fichier .env ne doit jamais être partagé.

Ce fichier va contenir nos variables d’environnement que l’on veut garder d’ordre privé. 

Il se crée à la racine du projet, et il est sensible à la casse. Vous devez bien écrire .env

Stocke dans une variable MONGO_URI, le lien de connexion à ta bdd mongodb.

A noter : On met les variables d’environnement en MAJUSCULES par convention, pas par obligation. 

1- Une convention historique : à l’origine (Unix, Linux, macOS), les variables d’environnement système étaient écrites en majuscules : PATH? HOME, SHELL… Ces variables existent sur tous les systèmes. Du coup, les développeurs ont gardé cette habitude.

2- Et ca permet de les repérer facilement dans le code. Exemple : os.getenv(« MONGO_URI »)

3- Cela sert aussi à les différencier des variables Python par exemple :

variable Python : snake_case
variable env : MAJUSCULES

Importer python-dotenv et charger le fichier .env

Pour lire le fichier .env dans Python, on utilise la librairie python-dotenv. Elle permet à Python de lire automatiquement le fichier .env et de charger ses variables dans le système.

Importe le en haut de ton fichier main.py

Il est possible que ton editeur de code te demande de l’installer dans le terminal également, dans ce cas il te suffit de taper la commande : 

pip install python-dotenv

Puis on va charger le fichier .env

Ajoute load_dotenv() dans ton fichier main.py 

Cette ligne lit le fichier .env, et rend ses variables accessibles avec os.getenv(). Sans cette ligne, Python ne verra pas ton MONGO_URI.

Connexion à la bdd depuis un fichier .env

Pour connecter la bdd on va :

  • Récupérer l’url depuis le fichier .env
  • Puis créer la connexion MongoDB
  • Et sélectionner la base de données, en la stockant dans une variable, pour l’utiliser ultérieurement dans nos routes et fonctions

 

Récupérer les données

L’appel à la collection « test » ne se fait plus exactement de la même façon, que sans environnement. 

La base de données étant client[‘db’]. Notre appel de collection sera db[‘nom_de_la_collection’]

Hacher les mots de passe

Hacher un mot de passe veut dire « le coder » pour qu’il n’apparaisse pas en clair. On parle aussi de hachage de mot de passe.

Quand un utilisateur s’inscrit sur ton site, tu peux t’assurer de le protéger en programmant des mots de passe haché afin que personne ne puisse les lire. Même pas toi en tant qu’administrateur ! Tu verras des mots de passe codés dans ta base de données

L’extension bcrypt

bcrypt est une extension de Flask permettant de faire un hachage de mot de passe automatique dès qu’un utilisateur s’enregistre par exemple. Il est facile à utiliser car il est préconçu pour, et tu vas voir ici comment l’utiliser.

Tout d’abord, tu dois importer bcrypt en haut de ton fichier python.

Tu vas utiliser la fonction bcrypt.hashpw(), qui prend 2 arguments :

  • encode() qui va permettre de lui dire d’encoder en utf-8
  • gensalt() qui va ajouter une chaine de caractères aléatoires afin que personne ne puisse décoder le hachage.
 
 
 

Si tu regardes le print() dans ta console, tu vois que ton mot de passe est maintenant haché

 

Tu peux écrire la fonction bcrypt.hashpw() sur une seule ligne, en ajoutant directement ses arguments : 

Retour en haut