Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Garder les secrets hors du code

Après cette leçon: Je peux garder les secrets en dehors du code.

Leçon de 45 minAucune commande

Une clé oubliée dans un fichier

Un développeur d’une jeune entreprise de livraison publie son code sur un dépôt public.

Dans un fichier, il a laissé la clé secrète du service de paiement. Des robots parcourent ces dépôts sans arrêt. En une heure, la clé est trouvée et utilisée.

Une seule ligne a suffi. Cette leçon montre où ranger un secret.

À la fin de cette leçon

Remarque

Je peux garder les secrets en dehors du code.

Mots clés

MotCe que ça veut direExemple
Secretune donnée qui ouvre un accèsun mot de passe de base
Clé d’APIun code qui identifie un programme auprès d’un service
Variable d’environnementune valeur donnée au programme à son lancementCLE_PAIEMENT
.gitignorela liste des fichiers que Git ne suit pas
Validationle contrôle d’une entrée avant de l’utiliser

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un secret dans le code voyage avec lui

Un fichier de code est copié partout : sur le poste des collègues, dans Git, sur les serveurs, parfois sur un dépôt public.

Un secret écrit dedans part avec lui. Tous ceux qui lisent le code lisent aussi la clé.

Un premier réflexe est de chercher les secrets oubliés. La commande grep le fait vite.

Essayez : chercher des secrets

Code: bash
mkdir -p livraison && cd livraison
printf 'CLE_PAIEMENT = "sk_live_51Hx9demo"\nprint("Paiement en cours")\n' > payer.py
printf 'print("Liste des commandes")\n' > commandes.py

# Cherchez dans tous les fichiers ce qui ressemble à un secret
grep -n -i "cle\|password\|token" *.py

# Ajoutez une ligne password = "azerty" à commandes.py, puis cherchez encore

Le secret arrive par l’environnement

La bonne place pour une clé est une variable d’environnement. Le programme la lit au lancement.

Le code ne contient que le nom de la variable. La valeur vit sur le serveur ou dans un gestionnaire de secrets.

Sur votre poste, elle peut vivre dans un fichier .env. Ce fichier figure dans le .gitignore, donc Git ne l’envoie jamais.

Essayez : une clé venue de l’environnement

Code: bash
mkdir -p livraison && cd livraison
# Le script lit la clé dans l'environnement, jamais dans le fichier
printf 'echo "Clé trouvée, elle finit par ${CLE_PAIEMENT: -4}"\n' > payer.sh

# La variable existe pour cette session seulement
export CLE_PAIEMENT="cle-de-demo-7731"
bash payer.sh

# Le fichier lui-même ne contient aucun secret
cat payer.sh

# Essayez : export CLE_PAIEMENT="autre-cle-0042", puis bash payer.sh

Ce que Git montre avec un .gitignore

Code: bash
$ cat .gitignore
.env

$ git status
On branch main
Untracked files:
  payer.sh

# Le fichier .env, qui contient la clé, n'apparaît pas : Git l'ignore.

Une erreur fréquente

Attention

Beaucoup pensent qu’il suffit d’effacer la clé dans un nouveau commit. L’ancienne version reste dans l’historique de Git. Une clé publiée doit être révoquée et remplacée tout de suite, car quelqu’un l’a peut-être déjà copiée.

Toute entrée est vérifiée avant usage

Le code sûr ne fait pas confiance à ce qui arrive de l’extérieur : formulaire, fichier, autre programme.

La validation décrit ce qui est permis et refuse tout le reste. Un code postal français, par exemple, fait exactement cinq chiffres.

Faites ce contrôle sur le serveur. Celui du navigateur aide l’utilisateur, mais un attaquant peut le contourner.

Exemple : que garder, que refuser

SaisiePermise ?Pourquoi
75011OuiCinq chiffres
69002 Oui, sans les espacesOn retire les espaces autour
7501NonQuatre chiffres seulement
ABCDENonCe ne sont pas des chiffres

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.