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

Sécuriser un serveur web

Après cette leçon: Je peux dire ce qu'un serveur web laisse voir et quels réglages le durcissent.

Leçon de 45 min4 commandesLab de durcissement d’un serveur web : corriger une configuration nginx faible et la vérifier avec curl

Un site qui en dit trop

Un serveur web est un programme qui envoie des pages à ceux qui les demandent. Mal réglé, il montre aussi sa version, la liste de ses dossiers et des fichiers qu'on a oubliés.

Dans cette leçon, tu apprends à repérer ces faiblesses, et ce que fait chaque réglage pour les fermer.

À la fin de cette leçon

Remarque

Je peux dire ce qu'un serveur web laisse voir et quels réglages le durcissent.

Mots clés

MotCe que ça veut direExemple
Serveur webun programme qui envoie des pages web à ceux qui les demandent
En-tête HTTPune ligne d'information envoyée avec la pageServer: nginx
Durcirrégler un système pour qu'il montre et permette moins
Code d'étatle nombre qui dit comment s'est passée la demande404
Liste de dossierune page qui montre tous les fichiers d'un dossier

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

Ce qu'un serveur montre sans qu'on le demande

Chaque réponse du serveur commence par des en-têtes : des lignes comme Server: nginx/1.27.5. Cette ligne donne le nom du logiciel et sa version.

Un attaquant cherche alors les failles connues de cette version. Cacher la version ne règle rien tout seul, mais ça ne lui donne rien gratuitement.

Lire une ligne d'en-tête

Code: python
ligne = "Server: nginx/1.27.5"
morceaux = ligne.split(": ")
print("Nom :", morceaux[0])
print("Valeur :", morceaux[1])
# Change la ligne en "Server: nginx" : que reste-t-il comme information ?

La règle du lab

Important

Regarde seulement le site de ton propre lab, et seulement avec la permission de ton enseignant. Ne pointe jamais un outil vers un site qui n'est pas le tien. Ici, tu cherches les faiblesses pour les fermer.

Avant de commencer

Remarque

Appuie sur Start the lab dans la barre en haut et attends que le site soit prêt. Le site est la boulangerie Brightside, qui s'appelle web dans le terminal.

Demande seulement les en-têtes du site

Commande
curl -I http://web

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Ouvre un dossier du site

Commande
curl http://web/files/

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Demande un fichier qu'on n'aurait pas dû laisser

Commande
curl -s -o /dev/null -w '%{http_code}\n' http://web/.git/config

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Ce que tu viens de voir

CommandeCe que le serveur répondPourquoi c'est un risque
curl -I http://webUne ligne Server avec un numéro de versionElle dit à l'attaquant quelles failles chercher
curl http://web/files/Une page « Index of » qui liste les fichiersTout le contenu du dossier est visible, même ce qu'on voulait cacher
curl ... /.git/configLe nombre 200, qui veut dire « voici le fichier »Un dossier de travail oublié montre l'adresse du code et son histoire

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

Une erreur fréquente

Attention

Beaucoup pensent qu'un serveur est sûr dès qu'il cache sa version. Cacher n'empêche pas la faille d'exister : on gagne seulement du temps. Il faut aussi mettre à jour le logiciel et fermer ce qui n'a pas à être visible.

À quoi servent les en-têtes de sécurité ?

Le serveur peut aussi donner des consignes au navigateur, avec des en-têtes de sécurité. Chacun ferme une porte précise.

Dans nginx, une ligne add_header envoie un en-tête, et server_tokens off; cache la version. Le tableau suivant dit à quoi sert chacun.

Les quatre en-têtes du lab

En-têteCe qu'il demande au navigateurCe qu'il évite
X-Content-Type-OptionsNe pas deviner le type d'un fichierUn fichier pris pour un script
X-Frame-OptionsNe pas afficher la page dans le cadre d'un autre siteUn faux bouton caché sur ta page
Content-Security-PolicyN'accepter que les scripts venant de sources listéesUn script ajouté par un attaquant
Referrer-PolicyNe pas dire d'où vient le visiteurUne adresse privée qui fuit dans un lien

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

Lis le bilan du lab : réussi ou raté

Commande
docker exec web lab-check

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Comment lire le bilan

Le script du lab répond en anglais. Chaque ligne commence par PASS si la protection est en place, ou par FAIL si elle manque.

Au départ, tu vois surtout des FAIL. La version est visible et le dossier est listé. Les quatre en-têtes manquent, et deux fichiers et la page /admin/ sont ouverts à tous.

Corriger ces lignes est le travail du lab, avec ton enseignant.

À propos de ce labo et de sa source: Lab de durcissement d’un serveur web : corriger une configuration nginx faible et la vérifier avec curl

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.