• 10 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 23/12/2019

Protégez les données en transit

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

L'exposition des données sensibles est la troisième vulnérabilité dans le top 10 de l’OWASP.  Les données stockées et transmises dans l’application doivent respecter les bonnes pratiques de sécurité. Dans ce chapitre, nous aborderons la sécurisation des données échangées.

Mais comment faire pour sécuriser ces données échangées ? Eh bien, cela passe par la sécurisation de la couche de transport lors de l’échange des données.

Découvrez comment les données transitent la couche de transport

Lorsque vous surfez sur Internet, votre navigateur utilise le les protocole HTTP (Hypertext Transfer Protocol) pour afficher les pages web, et le protocole Transmission Control Protocol/Internet Protocol (TCP/IP) pour les transmettre.

OK. Imaginons que vous tapez une URL dans votre barre de navigateur et que vous cliquez sur Entrée.

Votre navigateur va lancer une connexion TCP, qui va envoyer des requêtes GET et POST pour vous connecter au serveur web associé au nom de domaine ou à l'adresse IP.

Si le serveur web établit la connexion TCP avec le navigateur, une réponse avec le code status et le fichier demandé (généralement le fichier index.html pour la page web) sera transmise. Mais dans notre cas, les données transitent en HTTP et pas en HTTPS...

Ceci nous amène à la première vulnérabilité. Les données transitant en HTTP peuvent être interceptées, car elles transitent en clair.

Mais alors… Comment un utilisateur malveillant peut avoir accès à cette connexion TCP ?

Comprenez l’attaque de l’homme du milieu (MITM) 

Prenons un exemple. Vous avez décidé d'aller dans votre endroit préféré pour boire un café et vous utilisez le Wi-Fi gratuit pour surfer sur certains sites. À votre insu, un pirate a décidé d'utiliser un sniffer réseau, qui enregistre les transmissions TCP directement sur son ordinateur.

Vous surfez et vous vous connectez à un site en HTTP pour envoyer des articles de blog. Le pirate sera en mesure d'accéder à vos informations d'identification et au contenu de votre blog, car celui-ci n'était pas chiffré ! Votre session a été détournée et l'attaquant peut ainsi voler vos données.

L'attaque de l'homme du milieu (Man in the Middle, en anglais) est l'une des principales causes de détournement de session. L'attaquant se place au milieu de votre communication, intercepte les connexions réseau et capte ainsi tout ce que vous envoyez.

Le vol de données et le détournement de session ne sont que quelques exemples de ce qu'un attaquant peut faire une fois sur le réseau. D'une façon ou d'une autre, si les données sont envoyées en HTTP et sont en clair, il suffit de peu d'efforts pour interpréter les données.

Mais... Comment je peux résoudre ce problème ?

Utilisez HTTPS

Attends… C'est quoi, HTTPS ?

HTTPS est la variante sécurisée de HTML qui utilise les protocoles  Secure Sockets Layer/ Transport Layer Security (SSL/TLS) pour chiffrer les transmissions. 

Cela permet d'ajouter une couche de sécurité lorsque les données sont en transit.

En règle générale, si vous devez vous authentifier avec un mot de passe n'importe où sur le site, utilisez HTTPS pour protéger le mot de passe lorsqu'il est transmis sur le réseau.

Je vous conseille de configurer l'ensemble de votre application web avec HTTPS, qu'elle traite ou non des informations sensibles. En effet, Google marquera tous les sites HTTP comme non sécurisés pour conduire plus de sites à utiliser HTTPS. Avoir un site configuré avec HTTPS augmentera la confiance de vos utilisateurs.

Comment utiliser le protocole TLS pour sécuriser une application ?

Tout d'abord, obtenez un certificat SSL et ajoutez-le à votre serveur. Ce certificat est nécessaire pour chiffrer les données en cours de transmission.

Ensuite, codez vos pages avec HTTPS !

Mettez en place le HTTPS

Pour créer un serveur web pour votre application web, Node.js est une plateforme populaire. Cependant, il utilise HTTP par défaut pour la transmission de données. 

Pour utiliser HTTPS, Il suffit de spécifier l'utilisation du module HTTPS sur Node.js.

Pour démarrer un serveur HTTP sur Node.js, le code est le suivant :

var http = require('http');
http.createServer(function (req, res) {
}).listen(8080);

Il vous suffit d'ajouter un S et vous pouvez maintenant démarrer un serveur HTTPS tout aussi facilement (avec un certificat SSL, bien sûr).

var https = require('https');
https.createServer(function (req, res) {
}).listen(8080);

ASP.NET a un module appelé SecureWebPageModule, qui peut être ajouté au web.config avec l'ajout suivant :  <secureWebPages enabled="true">. 

[RequireHttps] peut également être utilisé dans le fichier AccountController.cs. Enfin, ASP. NET prend en charge la réécriture d'URL.

Avec Ruby on Rails, vous pouvez exécuter un serveur web NGINX en utilisant HTTPS, et créer votre certificat :

  •   sur le fichier production.rb, changez la valeur config.force_ssl = true ;

  •   sur application.rb, écrivez la ligne  config.force_ssl = (ENV[ENABLE_HTTPS"] == "yes") ;

  •   utilisez Rack pour forcer SSL en intégrant la gem rack-ssl.

Quel que soit le langage que vous utilisez, assurez-vous que votre page de connexion et toutes les pages web qui font partie de la session utilisent HTTPS.

Sécurisez les requêtes GET et POST

Lorsque vous mettez en place des connexions TCP dans vos requêtes, quelques règles de sécurité peuvent être mises en place.

OK... Mais pourquoi parle-t-on de tout ça ? 

Je vais vous l'expliquer tout de suite !

Une requête GET ressemble à ceci :

GET /index.html HTTP:1.1
Header:
Body:

Ses paramètres sont présents dans l'URL, et sont mis en cache dans le navigateur.

Il est préférable d'utiliser une requête GET lorsque vous récupérez des informations. Cela signifie que vous pouvez interroger la base de données, mais sans modification.

Une requête POST ressemble à ceci :

POST https://securesite.com/resetpassword.php
Header:
Body: password=password123 (encrypted)

Les requêtes POST sont utilisées pour apporter des modifications à la base de données et doivent donc être transmises avec un chiffrement par TLS.

Ces requêtes ne permettent pas de sauvegarder les données en cache dans le navigateur, rendant ainsi les paramètres  contenus dans le corps de la requête facilement piratables.

Comment être sûr que mes requêtes GET et POST ne sont pas exposées à des vulnérabilités ? 

Ces modules externes vous permettront de vous assurer que vous utilisez HTTPS pour toutes vos requêtes GET et POST.

D'accord.... Je vois bien que je dois faire de nombreuses choses pour sécuriser mes données. Mais il doit bien exister un système de sécurité par défaut sur mon navigateur, non ?

Tirez parti de la sécurité par défaut de votre navigateur

Tout à fait ! Parlons maintenant de Cross-Origin Resource Sharing (CORS).

Votre navigateur fournit une sécurité à vos requêtes GET et POST par défaut. Lorsqu'une demande est faite, elle ne sera autorisée que si elle a la même origine.

Cela signifie qu'elle doit avoir les mêmes nom de domaine, port, hôtes et schémas. Cette restriction n'est pas toujours utile si les requêtes nécessitent une transmission vers un autre port ou domaine. Lorsque cela se produit, l'application web est exposée à une attaque CSRF.

Comment résoudre ce problème ?

CORS peut être implémenté pour éviter les attaques CSRF, en ajoutant des politiques pour limiter l'accès à une origine spécifique ou un type de requête HTTP, par exemple.

Adoptez les bonnes pratiques

Voici quelques recommandations pour protéger vos données en transit :

  1. N'utilisez GET que pour récupérer des informations.

  2. Utilisez POST pour les informations qui seront manipulées.

  3. Toutes les requêtes POST doivent utiliser HTTPS/SSL pour s'assurer que le corps est chiffré.

  4. Vérifiez tous les modules tiers que vous utilisez pour créer des requêtes GET/POST et utilisez HTTPS pour chacun d'entre eux !

En résumé

  • Utilisez le HTTPS pour l'ensemble de votre site, même s'il ne contient pas de données sensibles.

  • Utilisez les requêtes GET pour récupérer les informations et POST pour modifier les informations.

  • Sécurisez vos cookies pour qu'ils soient transmis par l'en-tête et via HTTPS.

  • Sécurisez vos sessions en ajoutant une date d'expiration, en sécurisant l'ID et en ne mettant pas cet ID dans l'URL.

  • L'utilisation du chiffrement dans la couche Transport peut prévenir les attaques MITM !

Nous venons de voir comment protéger les données en transit. Dans le prochain chapitre, nous verrons comment protéger les données stockées sur votre application.

Exemple de certificat de réussite
Exemple de certificat de réussite