HTTP : signification, vulnérabilités, protection

HTTP : signification, vulnérabilités, protection

Hossam M.
Calendar picto
22/12/2022
Clock picto
8 min

HTTP (Hypertext Transfer Protocol) est un protocole essentiel d'internet. Il permet l'échange de données entre client et serveur, tels que l'ordinateur d'un internaute et un site web. Découvrez tout ce que vous devez savoir sur ce système, et sur ses vulnérabilités de cybersécurité.

Nous utilisons presque tous internet quotidiennement, mais peu savent comment fonctionne le World Wide Web. Que se passe-t-il lorsqu'on clique sur un lien ? Par quel mécanisme le contenu d'un site s'affiche à l'écran ?

Ce réseau mondial repose sur plusieurs protocoles de communication, et l'un des principaux est le HTTP : Hypertext Transfer Protocol.

Toutefois, ce protocole conçu dans les années 90 n'est plus à la hauteur des enjeux modernes de cybersécurité et de protection de la vie privée. Découvrez tout ce que vous devez savoir sur le HTTP, et son successeur HTTPS permettant le chiffrement des données...

Qu'est-ce que le protocole HTTP ?

Conçu au début des années 1990, le protocole HTTP (Hypertext Transfer Protocol) est la fondation du World Wide Web. On l'utilise pour charger des pages web à l'aide de liens hypertext.

Ce protocole permet de récupérer des ressources telles que des documents HTML. Il est à la source de tous les échanges de données sur internet.

Grâce à son extensibilité, il n'est pas seulement utilisé pour récupérer des documents hypertextes, mais aussi des images et des vidéos. Il permet même de poster du contenu vers les serveurs, tels que des résultats de formulaire HTML. On peut aussi l'utiliser pour récupérer des parties de documents afin de mettre à jour des pages web sur demande.

C'est un protocole client-serveur de couche d'application, conçu pour transférer les informations entre des appareils en réseau et s'exécuter par-dessus les autres couches du stack de protocole réseau.

Il est envoyé via TCP, ou via une connexion TCP chiffrée en TLS. Toutefois, n'importe quel protocole de transport fiable pourrait théoriquement être utilisé.

En général, un flux HTTP implique une machine client effectuant une requête vers un serveur. Ce dernier répond en envoyant un message de réponse.

Les clients et les serveurs communiquent en échangeant des messages individuels, par opposition à un flux de données. Les messages envoyés par le client sont appelés « requêtes » et les messages envoyés par le serveur sont appelés « réponses ».

Les requêtes sont initiées par le destinataire, généralement un navigateur web. Un document complet est ensuite reconstruit à partir des différents sous-documents récupérés tels que le texte, la description de disposition, les images, les vidéos ou les scripts.

Les composants des systèmes HTTP

Le HTTP est un protocole client-serveur. Les requêtes sont envoyées par l'entité agent-utilisateur ou par son proxy, par exemple un navigateur web ou un robot d'indexation de moteur de recherche.

Chaque requête est envoyée vers un serveur, qui la prend en charge et fournit une réponse. Il existe toutefois de nombreuses entités entre le client et le serveur : les proxies.

Ils effectuent différentes opérations et agissent comme des portails ou des caches, par exemple. Plusieurs ordinateurs se trouvent entre le client et le serveur, tels que les routeurs et les modems.

Grâce au design en couches du web, ces intermédiaires sont dissimulés sur les réseaux et les couches de transport. Le HTTP se trouve au sommet, au niveau de la couche d'application. Les autres couches peuvent être utiles pour diagnostiquer les problèmes de réseau, mais sont inutiles pour la description du HTTP.

Qu'est-ce que l'agent-utilisateur ?

L'agent-utilisateur ou user-agent peut être n'importe quel outil agissant au nom de l'utilisateur. Ce rôle est généralement occupé par un navigateur web, mais peut être tenu par tous les programmes utilisés par les ingénieurs et développeurs web pour déboguer leurs applications.

Le navigateur est toujours l'entité initiant la requête. Il ne s'agit jamais du serveur, même si des mécanismes ont été ajoutés au fil des années pour simuler des messages initiés par le serveur.

Pour afficher une page web, le navigateur envoie la requête originale afin de chercher le document HTML représentant la page. Il analyse ensuite le fichier, et effectue des requêtes additionnelles correspondant aux scripts d'exécution, aux informations CSS à afficher, et aux sous-ressources contenues au sein de la page telles que des images et des vidéos.

Le navigateur web combine ensuite ces ressources afin de présenter le document complet : la page web. Les scripts exécutés par le navigateur peuvent chercher davantage de ressources par la suite, et le navigateur met à jour la page en fonction.

Une page web est un document hypertexte. Cela signifie que certaines parties du contenu affiché sont des liens, pouvant être activés par un clic de souris pour chercher une nouvelle page web. C'est ce qui permet à l'utilisateur de diriger son agent-utilisateur et de naviguer sur le web. Le navigateur traduit les instructions en requêtes HTTP, et interprète les réponses HTTP pour présenter une réponse claire à l'utilisateur.

Qu'est-ce que le serveur web ?

Le serveur web est à l'autre extrémité du canal de communication. Comme son nom l'indique, son rôle est de servir le document requis par le client.

Même si le serveur apparaît virtuellement comme une seule machine, il peut s'agir d'un groupe de serveurs partageant la charge ou d'une pièce logicielle complexe interrogeant d'autres ordinateurs comme un cache, un serveur DB ou un serveur e-commerce. Il se charge de générer totalement ou partiellement le document sur demande.

À l'inverse, plusieurs instances logicielles peuvent être hébergées sur une même machine. Avec le HTTP/1.1 et le header Host, ces instances peuvent même partager la même adresse IP.

Qu'est-ce qu'un proxy ?

Plusieurs machines et ordinateurs relaient les messages HTTP entre le navigateur web et le serveur. Compte tenu de la structure en couches du stack Web, la plupart opèrent au niveau physique ou réseau et deviennent transparents à la couche HTTP. Ils peuvent avoir un impact majeur sur les performances.

Ceux qui opèrent aux couches d'application sont généralement appelés proxies. Ils peuvent être transparents et transmettre les requêtes reçues sans les altérer. Au contraire, ils peuvent être non transparents et modifier la requête avant de la transmettre au serveur.

Les proxies peuvent remplir plusieurs fonctions telles que le caching, le filtering, l'équilibrage de charge pour permettre à plusieurs serveurs de servir différentes requêtes, l'authentification pour contrôler l'accès aux ressources, ou encore le logging permettant le stockage d'informations historiques.

Qu'est-ce qu'une requête HTTP ?

Une requête HTTP est la façon dont les plateformes de communication internet, telles que les navigateurs web, demandent les informations nécessaires au chargement d'un site web.

Chaque requête HTTP effectuée sur internet transporte différents types d'informations sous forme de données encodées. En général, une requête HTTP contient le type de version de HTTP, une URL, une méthode HTTP, les headers de requête HTTP, un corps HTTP optionnel.

Une méthode HTTP, aussi appelée verbe HTTP, indique l'action attendue du serveur par la requête HTTP. Parmi les deux méthodes HTTP les plus courantes, on compte « GET » et « POST ».

Une requête « GET » attendre des informations en retour, habituellement sous la forme d'un site web. Une requête « POST » indique généralement que le client soumet des informations au serveur web, par exemple les identifiants de connexion de l'utilisateur.

Les headers de requête HTTP contiennent des informations textuelles, stockées sous forme de paires clé-valeur. Ils sont inclus dans chaque requête HTTP, et dans chaque réponse. Ces headers servent à communiquer les informations principales, comme le navigateur web utilisé par le client ou les données requises.

Un corps de requête HTTP est la partie contenant le « corps » de l'information transférée par la requête. Il peut contenir toutes les informations soumises au serveur web, comme le nom d'utilisateur et le mot de passe ou toute autre donnée entrée dans un formulaire.

Qu'est-ce qu'une réponse HTTP ?

La réponse HTTP est ce que les clients web, tels que les navigateurs, reçoivent du serveur internet en réponse à une requête HTTP. Ces réponses communiquent des informations basées sur la demande de la requête HTTP. En général, une réponse HTTP contient un code de statut, des headers de réponse, et un corps optionnel.

Le code de statut HTTP est un code à trois chiffres, utilisé le plus souvent pour indiquer si une requête HTTP a été complétée avec succès. On distingue cinq catégories de codes de statut.

Si le code commence par 1, la réponse est informationnelle. Un code de statut commençant par 2 indique un succès. Par exemple, quand un client effectue une requête de page web, la réponse la plus courante est un code de statut « 200 OK » indiquant que la requête a été complétée correctement.

Le code statut commençant par 3 indique une redirection. En revanche, si le code statut commence par 4 ou 5, il indique qu'une erreur empêche la page web de s'afficher. Un code commençant par 4 traduit une erreur du côté du client.

On peut citer comme exemple la fameuse « erreur 404 » survenant notamment en cas d'erreur de frappe dans l'URL. Un code de statut commençant par 5 indique une erreur côté serveur.

Tout comme les headers de requête, les headers de réponse véhiculent les informations importantes telles que le langage et le format des données envoyées dans le corps de réponse.

Enfin, le corps de réponse est optionnel, mais la plupart des réponses aux requêtes « GET » en sont dotées. Il contient les informations demandées. Pour la plupart des requêtes web, il s'agit de données HTML que le navigateur web convertit en page web.

Avantages et inconvénients du HTTP

Le protocole HTTP est conçu pour être simple. Même si le HTTP/2 a introduit une complexité supplémentaire en encapsulant les messages dans des cadres, il reste facilement compréhensible. Ceci facilite le testing pour les développeurs, et réduit la complexité pour les débutants.

Depuis le HTTP/1.0, les headers HTTP permettent d'étendre facilement le protocole et de mener des expériences. Pour introduire une nouvelle fonctionnalité, un simple accord entre un client et un serveur sur une nouvelle sémantique de header est suffisant.

Le HTTP est un protocole « stateless ». Cela signifie que chaque commande est exécutée indépendamment. À l'origine, chaque requête HTTP créait et fermait une connexion TCP.

Toutefois, depuis la version 1.1 du protocole HTTP, la connexion persistante permet à de multiples requêtes HTTP de passer par une connexion TCP persistante. Ceci permet d'améliorer la consommation de ressources.

Or, les requêtes HTTP peuvent être utilisées en larges quantités pour lancer une attaque par déni de service (DDoS) sur un appareil. Il s'agit d'une attaque sur la couche d'application, ou d'une attaque layer 7.

En guise de protocole de transport, HTTP utilise le standard TCP. Pour échanger une requête et une réponse, un client et un serveur doivent établir une connexion TCP. Ce processus requiert plusieurs allers-retours.

À l'origine, HTTP/1.0 ouvrait une connexion TCP séparée pour chaque paire de requête/réponse HTTP. Ce système n'était pas efficace en cas de multiples requêtes successives, par rapport au partage d'une connexion TCP unique.

Depuis HTTP/1.1, le pipelining et les connexions persistantes permettent de contrôler partiellement la connexion TCP à l'aide du header Connection. HTTP/2 est allé plus loin en permettant le multiplexing de messages sur une connexion unique.

Des expériences en cours visent à concevoir un meilleur protocole de transport pour HTTP. Par exemple, Google mène des tests avec QUIC basé sur UDP.

HTTPS : la version sécurisée du protocole HTTP

HTTPS (HyperText Transfer Protocol Secure est une version sécurisée de HTTP. En effet, le protocole d'origine n'est pas pensé pour la cybersécurité.

Il est en texte clair, ce qui le rend vulnérable à différents types de cyberattaques. En guise d'exemples, on peut citer les attaques de type man-in-th-middle et eavesdropping.

Grâce au chiffrement, le HTTPS empêche toute interception des données envoyées via internet. Les informations ne peuvent plus être lues ou modifiées par des tiers.

Ce protocole sécurisé vérifie l'identité d'un site web ou d'un service web pour le client qui s'y connecte, et chiffre toutes les informations échangées entre les deux. Parmi les informations protégées, on peut citer les cookies, les détails d'agent-utilisateur, les chemins URL, les soumissions de formulaires et les paramètres de string de requête.

Le HTTPS est une combinaison du HTTP et du Transport Layer Security (TLS). Ce protocole réseau permet d'établir une connexion chiffrée avec un pair authentifié sur un réseau non sécurisé.

Le HTTPS renforce la sécurité et la confidentialité pour les utilisateurs d'internet et les propriétaires de sites web. En outre, le HTTP d'origine pourrait devenir incompatible avec les navigateurs web modernes. Le HTTPS améliore aussi le référencement d'un site web par Google.

En revanche, il ne chiffre pas les adresses IP ni les noms de domaines de destination. Même le trafic chiffré peut révéler des informations importantes telles que le temps passé sur un site web ou la taille des informations partagées.

Afin de lancer une attaque de phishing ou hameçonnage, les cybercriminels peuvent également falsifier l'icône de cadenas indiquant qu'un site web est sécurisé.

Comment sécuriser un site web ?

Pour vérifier si un site web est sécurisé, il suffit de chercher son statut de sécurité situé à gauche de l'adresse du site web. Un petit cadenas indique que le site est sécurisé est que toutes les informations envoyées sont confidentielles.

L'icône d'information indique que le site n'utilise pas de connexion privée. La prudence s'impose, car un tiers pourrait voir ou modifier les informations envoyées ou reçues.

Enfin, l'icône de point d'exclamation dans un triangle rouge est une alerte. Le site web est dangereux ou mal sécurisé. Mieux vaut l'éviter, et ne fournir aucune information confidentielle.

Afin de renforcer la sécurité d'un site web, la première étape est d'obtenir un certificat de sécurité d'une source fiable offrant un support technique. Assurez-vous que ce certificat est à jour.

Vous pouvez aussi utiliser des redirections server-side de HTTP vers HTTPS, pour vous assurer que les utilisateurs et les moteurs de recherche aillent toujours vers les pages web HTTPS et que le contenu soit le même. Utilisez aussi un outil d'inspection d'URL pour vérifier que vos pages HTTPS peuvent être indexées par Google.

Comment suivre une formation de cybersécurité ?

Le HTTP est un protocole essentiel au fonctionnement du web, mais présente des vulnérabilités. Ce n'est que l'un des nombreux dangers de cybersécurité liés à internet.

Face aux multiples menaces, les entreprises recherchent des experts capables de protéger leurs données et leurs systèmes informatiques. Afin de commencer votre carrière de cybersécurité, vous pouvez suivre la formation analyste SOC 2 de la Cyber University.

Cette formation d'une durée de 365 heures s'effectue intégralement à distance, en Formation Continue ou en BootCamp. Vous découvrirez tout ce que vous devez savoir sur l'attaque et la défense, et un projet fil rouge de 40 heures permet de mettre en pratique les connaissances théoriques. Notre simulateur de cyberattaque permet une immersion complète en situation réelle.

À la fin de ce cursus, vous aurez toutes les compétences requises pour exercer le métier d'analyste SOC 2. Cette formation est reconnue par l'État et peut être financée via le Compte Personnel de Formation.

Pour les entreprises, nous proposons aussi des formations sur mesure. En fonction de vos besoins, nos experts conçoivent un programme pour initier votre effectif aux bonnes pratiques de cybersécurité. Découvrez la Cyber University !

Vous savez tout sur le HTTP. Pour plus d'informations sur le même sujet, découvrez notre dossier complet sur le TCP/IP et notre dossier sur les adresses IP.