Ce projet s’inscrit dans une démarche d’apprentissage pratique de la cybersécurité. L’objectif principal était d’analyser les headers HTTP renvoyés par mon propre site web secureaweb.fr, afin de comprendre leur rôle, leur contenu et leurs implications en matière de sécurité.
En tant qu’étudiante autodidacte, j’ai choisi de travailler directement sur un domaine que je possède, ce qui m’a permis d’avoir une vision concrète et réelle et non simulée des en-têtes qu’un serveur web renvoie à chaque requête HTTP.
Pourquoi les headers HTTP ?
Les en-têtes HTTP sont souvent invisibles pour l’utilisateur final, mais ils jouent un rôle fondamental dans la communication entre un client (navigateur) et un serveur. Ils transportent des informations critiques sur la sécurité, le type de contenu, les permissions et la gestion des connexions.
Le protocole HTTP
HTTP (HyperText Transfer Protocol) est le protocole de base du Web. Chaque échange entre un navigateur et un serveur se compose de :
Requête — envoyée par le client (GET, POST…)
Réponse — renvoyée par le serveur avec un code de statut
Headers — métadonnées associées à chaque échange
Body — contenu de la page ou des données
Les headers sont des paires clé-valeur qui précisent comment interpréter la réponse, gérer la connexion, et appliquer des politiques de sécurité.
</> Code Python & Exécution
Environnement & Script Python
Replit — Un environnement de développement en ligne
Pour ce projet, j’ai aussi utilisé Replit, une plateforme de développement en ligne qui permet d’écrire et d’exécuter du code directement dans le navigateur, sans aucune installation locale. C’est un outil particulièrement adapté aux apprenants en cybersécurité : il est accessible, rapide à configurer et disponible sur tous les appareils, y compris mobile.
ⓘ 📌 Pourquoi Replit ? Pas besoin de configurer un environnement local, les bibliothèques Python comme requests sont disponibles directement, et le terminal intégré permet de visualiser les résultats immédiatement.
Le script Python
Le script utilise la bibliothèque requests, l’une des plus populaires en Python pour effectuer des requêtes HTTP. En quelques lignes seulement, il est possible d’envoyer une requête GET vers une URL et de récupérer l’ensemble des headers renvoyés par le serveur.
import requests
url = "https://secureaweb.fr"
response = requests.get(url)
headers = response.headers
print("URL :", url)
for key, value in headers.items():
print(key, ":", value)
Le script parcourt le dictionnaire response.headers et affiche chaque paire clé-valeur dans le terminal, offrant une lecture claire et structurée des en-têtes reçus.
Étapes d’exécution
01 – Création de l’environnement de travail
Ouverture d’un environnement Python en ligne et écriture du script directement dans l’éditeur.
02 – Écriture du script Python
Utilisation de la bibliothèque requests pour envoyer une requête HTTP vers le domaine https://secureaweb.fr.
03 – Exécution du programme
Lancement du script via le bouton “Run” afin d’envoyer la requête et récupérer la réponse du serveur.
04 – Analyse des résultats
Lecture des headers HTTP affichés dans le terminal pour observer les informations techniques renvoyées par le serveur.
Voici les principaux headers HTTP observés lors de l’exécution du script sur le domaine secureaweb.fr, accompagnés de leur explication pédagogique.
Content-Type
Indique le type MIME du contenu renvoyé par le serveur. Exemple typique : text/html; charset=UTF-8. Ce header dit au navigateur comment interpréter et afficher le contenu reçu. En cybersécurité, une mauvaise configuration peut ouvrir la porte à des attaques de type MIME sniffing.
Permissions-Policy
Permet au serveur de contrôler quelles fonctionnalités du navigateur peuvent être utilisées sur la page (caméra, microphone, géolocalisation, etc.). C’est un header de sécurité important pour limiter la surface d’attaque et protéger les visiteurs contre des abus de fonctionnalités sensibles.
Transfer-Encoding
Précise comment le corps de la réponse est transmis. La valeur chunked indique que le contenu est envoyé en plusieurs morceaux successifs, ce qui améliore les performances. Ce header peut être impliqué dans certaines vulnérabilités comme le HTTP Request Smuggling si mal géré.
Connection
Gère la persistance de la connexion TCP entre le client et le serveur. La valeur keep-alive permet de réutiliser la même connexion pour plusieurs requêtes, réduisant ainsi la latence. La valeur close ferme la connexion après chaque échange.
⚠︎ ⚠️ Headers de sécurité manquants — L’analyse peut également révéler l’absence de headers importants comme Strict-Transport-Security, X-Frame-Options ou Content-Security-Policy. Ces absences constituent des vulnérabilités potentielles à corriger.
🎓Conclusion
Importance en Cybersécurité & Compétences Acquises
Pourquoi les headers sont critiques en sécurité
Les headers HTTP sont une première ligne de défense contre de nombreuses attaques web. Ils permettent d’activer ou de désactiver des mécanismes de sécurité côté navigateur, de contrôler les politiques d’accès, et de révéler (ou dissimuler) des informations sur l’infrastructure serveur.
➜ Protection XSS
Le header Content-Security-Policy limite les sources de scripts exécutables, réduisant le risque d’attaques Cross-Site Scripting.
➜ Clickjacking
X-Frame-Options empêche l’intégration de la page dans une iframe, contrant les attaques de type clickjacking.
➜ HTTPS forcé
Strict-Transport-Security oblige le navigateur à toujours utiliser HTTPS, protégeant contre les attaques Man-in-the-
Compétences acquises
🐍Python appliqué
Utilisation de la bibliothèque requests pour des requêtes HTTP réelles.
📝Protocole HTTP
Compréhension approfondie de la structure des échanges HTTP et du rôle des headers.
🔐Audit de sécurité
Premiers pas dans l’analyse de la surface d’attaque d’un site web réel.
☁️Environnement Replit
Maîtrise d’un outil de développement en ligne adapté à l’apprentissage.
Ce projet m’a permis de passer de la théorie à la pratique : analyser de vrais headers HTTP sur mon propre domaine m’a donné une vision concrète des enjeux de sécurité web. Chaque header est une décision de configuration et chaque décision a des conséquences en matière de protection.