Geekflare est soutenu par son public. Nous pouvons percevoir des commissions d'affiliation sur les liens d'achat présents sur ce site.
En Sécurité Dernière mise à jour : 24 septembre 2023
Partager sur :
Invicti Web Application Security Scanner - la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

Savez-vous que la plupart des failles de sécurité peuvent être corrigées par la mise en place des en-têtes nécessaires dans l'en-tête de la réponse ?

La sécurité est aussi essentielle que le contenu et le référencement de votre site web, et des milliers de sites web sont piratés en raison d'une mauvaise configuration ou d'un manque de protection. Si vous êtes propriétaire d'un site web ou ingénieur en sécurité et que vous cherchez à protéger votre site web contre le Clickjacking, l'injection de code, les types MIME, les attaques XSS, etc. alors ce guide vous aidera

Dans cet article, je vais vous parler des différents HTTP Headers(recommandés par l'OWASP) à implémenter dans plusieurs serveurs web, réseaux et fournisseurs CDN pour une meilleure protection de votre site web

Notes

  • Nous vous conseillons de faire une sauvegarde du fichier de configuration avant d'effectuer des modifications
  • Certaines en-têtes peuvent ne pas être supportés par tous les navigateurs, vérifiez donc la compatibilité avant l'implémentation.
  • Mod_headers doit être activé dans Apache pour implémenter ces en-têtes. Assurez-vous que la ligne suivante est décommentée dans le fichier httpd.conf.
LoadModule headers_module modules/mod_headers.so

Sivous utilisez WordPress : vous pouvez essayer d'utiliser le En-têtes HTTP du plugin, qui s'occupe de ces en-têtes et de bien d'autres choses encore.

Commençons... 👨‍💻

Sécurité stricte du transport HTTP

L'en-tête HSTS (HTTP Strict Transport Security) permet de s'assurer que toutes les communications d'un navigateur sont envoyées via HTTPS (HTTP Secure). Cela permet d'éviter les invitations à cliquer sur HTTPS et de rediriger les demandes HTTP vers HTTPS

Avant d'implémenter cet en-tête, vous devez vous assurer que toutes les pages de votre site web sont accessibles via HTTPS, faute de quoi elles seront bloquées

L'en-tête HSTS est supporté par toutes les versions les plus récentes des navigateurs tels que IE, Firefox, Opera, Safari et Chrome. Il existe trois paramètres de configuration

Paramètre Valeur Signification
max-age Durée (en secondes) pour indiquer au navigateur que les requêtes ne sont disponibles que via HTTPS.
includeSubDomains La configuration est également valable pour le sous-domaine.
précharge A utiliser si vous souhaitez que votre domaine soit inclus dans la liste de préchargement HSTS

Prenons l'exemple d'une configuration HSTS pour un an, incluant le préchargement pour le domaine et le sous-domaine

Serveur HTTP Apache

Vous pouvez implémenter HSTS dans Apache en ajoutant l'entrée suivante dans le fichier httpd.conf

Header set Strict-Transport-Security "max-age=31536000 ; includeSubDomains ; preload" (Jeu d'en-têtes Strict-Transport-Security "max-age=31536000 ; includeSubDomains ; preload")

)
Redémarrez Apache pour voir les résultats

Nginx

Pour configurer HSTS dans Nginx, ajoutez l'entrée suivante dans nginx.conf sous la directive server (SSL)

add_header Strict-Transport-Security 'max-age=31536000 ; includeSubDomains ; preload'

Comme d'habitude, vous devrez redémarrer Nginx pour vérifier que le système de sécurité de

Cloudflare

Si vous utilisez Cloudflare, vous pouvez activer HSTS en quelques clics

  • Connectez-vous à Cloudflare et sélectionnez le site
  • Allez dans l'onglet "Crypto" et cliquez sur "Enable HSTS"

cloudflare-hsts-config

Sélectionnez les paramètres dont vous avez besoin, et les changements seront appliqués à la volée

Microsoft IIS

Lancez le gestionnaire IIS et ajoutez l'en-tête en allant dans "HTTP Response Headers" pour le site concerné

iis-hsts

Redémarrez le site

X-Frame-Options

Utilisez l'en-tête X-Frame-Options pour prévenir la vulnérabilité du Clickjacking sur votre site web. En implémentant cet en-tête, vous demandez au navigateur de ne pas intégrer votre page web dans une frame/iframe. La prise en charge par les navigateurs étant limitée, vous devez vérifier avant de l'implémenter

Vous pouvez configurer les trois paramètres suivants

Paramètre Valeur Signification
SAMEORIGIN Le contenu d'un cadre/iframe n'est autorisé que s'il provient du même site.
REFUSER Empêche tout domaine d'intégrer votre contenu à l'aide d'un cadre/iframe.
ALLOW-FROM Autorise le cadrage du contenu uniquement sur un URI particulier.

Voyons comment mettre en œuvre "REFUSER"pour qu'aucun domaine n'intègre la page web

Apache

Ajoutez la ligne suivante dans httpd.conf et redémarrez le serveur web pour vérifier les résultats
L'

en-tête ajoute toujours X-Frame-Options DENY

Nginx

Ajoutez la ligne suivante dans nginx.conf directive/bloc du serveur sous

add_header X-Frame-Options "DENY" (en anglais)

Redémarrez pour vérifier les résultats

F5 LTM

Créez une iRule avec les éléments suivants et associez-la au serveur virtuel correspondant

when HTTP_RESPONSE {

HTTP::header insert "X-FRAME-OPTIONS" "DENY"

}
Vous n'avez pas besoin de redémarrer quoi que ce soit, les changements sont reflétés dans l'air

WordPress

Vous pouvez également implémenter cet en-tête via WordPress. Ajoutez ce qui suit dans un fichier wp-config.php

header('X-Frame-Options : DENY)

Si vous n'êtes pas à l'aise pour éditer le fichier, vous pouvez utiliser un plugin comme expliqué ici ou mentionné ci-dessus

Microsoft IIS

Ajoutez l'en-tête en allant dans "HTTP Response Headers" pour le site concerné

iis-x-frame-options

Redémarrez le site pour voir les résultats

X-Content-Type-Options

Prévenez les risques de sécurité liés aux types MIME en ajoutant cet en-tête à la réponse HTTP de votre page web. Cet en-tête indique au navigateur de considérer les types de fichiers tels qu'ils sont définis et d'interdire le reniflage de contenu. Il n'y a qu'un seul paramètre à ajouter : "nosniff"

Voyons comment annoncer cet en-tête

Apache

Vous pouvez le faire en ajoutant la ligne suivante dans le fichier httpd.conf

Jeu d'en-têtes X-Content-Type-Options nosniff

N'oubliez pas de redémarrer le serveur web Apache pour que la configuration soit active

Nginx

Ajoutez la ligne suivante dans le fichier nginx.conf sous le bloc serveur

add_header X-Content-Type-Options nosniff

Comme d'habitude, vous devez redémarrer Nginx pour vérifier les résultats

Microsoft IIS

Ouvrez IIS et allez dans HTTP Response Headers (En-têtes de réponse HTTP)

Cliquez sur Ajouter et entrez le nom et la valeur

iis-mime-types

Cliquez sur OK et redémarrez IIS pour vérifier les résultats

Politique de sécurité du contenu

Prévenez les attaques de type XSS, clickjacking, injection de code en implémentant l'en-tête Content Security Policy (CSP) dans la réponse HTTP de votre page web. La CSP indique au navigateur de charger le contenu autorisé sur le site web

Tous les navigateurs ne supportent pas la CSP, vous devez donc vérifier avant de l'implémenter. Il existe trois façons de mettre en place des en-têtes CSP

  • Politique de sécurité du contenu - Niveau 2/1.0
  • X-Content-Security-Policy - Déclassé
  • X-Webkit-CSP - Obsolète

Si vous utilisez encore la version obsolète, vous pouvez envisager de passer à la version la plus récente

Il existe de nombreux paramètres possibles pour mettre en œuvre la CSP, et vous pouvez vous référer à l'OWASP pour vous en faire une idée. Cependant, passons en revue les deux paramètres les plus utilisés

Paramètre Valeur Signification
default-src Charge tout à partir d'une source définie
script-src Chargez uniquement les scripts à partir d'une source définie

L'exemple suivant montre comment tout charger à partir de la même origine dans différents serveurs web

Apache

Ajoutez les éléments suivants dans le fichier httpd.conf et redémarrez le serveur web pour qu'ils soient efficaces

Jeu d'en-têtes Content-Security-Policy "default-src 'self' ;"

Nginx

Ajoutez ce qui suit dans le bloc serveur du fichier nginx.conf

add_header Content-Security-Policy "default-src 'self' ;"

Microsoft IIS

Allez dans les en-têtes de réponse HTTP pour votre site respectif dans le gestionnaire IIS et ajoutez ce qui suit

iis-csp

Consultez cette page pour mettre en œuvre les frame-ancestors à l'aide de CSP. Il s'agit d'une version avancée de X-Frame-Options

X-Permitted-Cross-Domain-Policies (politiques interdomaines autorisées)

Vous utilisez des produits Adobe tels que PDF, Flash, etc.

Vous pouvez implémenter cet en-tête pour indiquer au navigateur comment traiter les requêtes sur un domaine croisé. En implémentant cet en-tête, vous limitez le chargement des ressources de votre site à partir d'autres domaines afin d'éviter l'abus de ressources

Plusieurs options sont disponibles

Valeur Description
aucune aucune politique n'est autorisée
maître uniquement autorise uniquement la politique principale
tous tout est autorisé
par contenu uniquement N'autoriser qu'un certain type de contenu. Exemple - XML
by-ftp-only applicable uniquement à un serveur FTP

Apache

Si vous ne voulez autoriser aucune politique

Jeu d'en-tête X-Permitted-Cross-Domain-Policies "none" (aucune

)
Vous devriez voir l'en-tête comme suit

inter-domaine autorisé

Nginx

Et, disons que vous avez besoin d'implémenter master-only alors ajoutez ce qui suit dans nginx.conf sous le bloc serveur

add_header X-Permitted-Cross-Domain-Policies master-only

Et le résultat

nginx-permitted-cross

Politique de référence

Vous souhaitez contrôler la politique de référence de votre site ? Cela présente certains avantages en termes de confidentialité et de sécurité. Cependant, toutes les options ne sont pas prises en charge par tous les navigateurs, il convient donc d'examiner vos besoins avant la mise en œuvre

Referrer-Policy prend en charge la syntaxe suivante

Valeur Description
non-référent Les informations relatives au référent ne seront pas envoyées avec la demande.
no-referrer-when-downgrade Paramètre par défaut dans lequel les informations de référence sont envoyées au même protocole que HTTP à HTTP, HTTPS à HTTPS.
unsafe-url l'URL complète sera envoyée avec la demande.
même origine Le référent ne sera envoyé que pour le même site d'origine.
origine stricte n'est envoyé que si le protocole est HTTPS
origine stricte quand l'origine est croisée l'URL complète sera envoyée via un protocole strict tel que HTTPS
origine envoyer l'URL d'origine dans toutes les demandes
l'origine quand l'origine croisée envoyer l'URL COMPLET sur la même origine. Cependant, dans les autres cas, vous n'enverrez que l'URL d'origine.

Apache

Vous pouvez ajouter ce qui suit si vous souhaitez définir l'option "no-referrer"

En-tête set Referrer-Policy "no-referrer"

Et après le redémarrage, vous devriez avoir dans les en-têtes de réponse

politique de référencement-apache

Nginx

Supposons que vous ayez besoin d'implémenter la même origine, alors vous devez ajouter ce qui suit

add_header Referrer-Policy same-origin

Une fois configuré, vous devriez obtenir les résultats ci-dessous

referrer-nginx-same-origin

Attendez-CT

Un nouvel en-tête, encore à l'état expérimental, indique au navigateur de valider la connexion avec les serveurs web pour la transparence des certificats (CT). Ce projet de Google vise à corriger certaines failles du système de certificats SSL/TLS

Les trois variables suivantes sont disponibles pour l'en-tête Expect-CT

Valeur Description
max-age En secondes, durée pendant laquelle le navigateur doit mettre en cache la politique.
faire respecter Directive facultative permettant d'appliquer la politique.
rapport-uri Le navigateur doit envoyer un rapport à l'URL spécifiée lorsque la transparence d'un certificat valide n'est pas reçue.

Apache

Supposons que vous souhaitiez appliquer cette politique, envoyer un rapport et mettre en cache pendant 12 heures, vous devez alors ajouter ce qui suit

Header set Expect-CT 'enforce, max-age=43200, report-uri="https://somedomain.com/report"'

Et voici le résultat

expect-ct-apache-http

Nginx

Et si vous voulez faire un rapport et un cache pendant 1 heure ?

add_header Expect-CT 'max-age=60, report-uri="https://mydomain.com/report"'

Le résultat serait le suivant

expect-ct-nginx

Politique de permissions

Connue auparavant sous le nom de Feature-Policy, elle a été renommée Permissions-Policy avec des fonctionnalités améliorées. Vous pouvez consulter document du ce pour comprendre les principaux changements entre la politique des fonctionnalités et la politique des permissions

Avec la politique de permissions, vous pouvez contrôler les fonctionnalités du navigateur telles que la géolocalisation, le plein écran, le haut-parleur, l'USB, la lecture automatique, le haut-parleur, le microphone, le paiement, l'état de la batterie, etc. pour les activer ou les désactiver dans une application web. En mettant en œuvre cette politique, vous permettez à votre serveur d'ordonner à un client (navigateur) d'obéir aux fonctionnalités de l'application web

Apache

Supposons que vous ayez besoin de désactiver la fonction "plein écran". Pour ce faire, vous pouvez ajouter ce qui suit au fichier httpd.conf ou apache2.conf, en fonction de la version du serveur HTTP Apache que vous utilisez

Header always set Permissions-Policy "fullscreen 'none'" (en-tête

)
Que diriez-vous d'ajouter plusieurs fonctionnalités en une seule ligne ?

C'est également possible !
L'en-tête définit toujours

la politique de permissions "fullscreen 'none' ; microphone 'none'"

Redémarrez Apache HTTP pour voir le résultat

HTTP/1.1 200 OK
Date : Thu, 29 Apr 2021 06:40:43 GMT
Server : Apache/2.4.37 (centos)
Permissions-Policy : fullscreen 'none' ; microphone 'none'
Last-Modified : Thu, 29 Apr 2021 06:40:41 GMT
ETag : "3-5c116c620a6f1"
Accept-Ranges : bytes
Content-Length : 3
Keep-Alive : timeout=5, max=100
Connection : Keep-Alive
Content-Type : text/html ; charset=UTF-8

Le code ci-dessus demandera au navigateur de désactiver le plein écran et le microphone

Vous pouvez également désactiver entièrement la fonctionnalité en laissant la liste d'autorisations vide

Par exemple, vous pouvez ajouter ce qui suit pour désactiver la fonction de géolocalisation

Header always set Permissions-Policy "geolocation=()"

Le navigateur afficherait le résultat suivant

HTTP/1.1 200 OK
Date : Thu, 29 Apr 2021 06:44:19 GMT
Server : Apache/2.4.37 (centos)
Permissions-Policy : geolocation=()
Last-Modified : Thu, 29 Apr 2021 06:40:41 GMT
ETag : "3-5c116c620a6f1"
Accept-Ranges : bytes
Content-Length : 3
Keep-Alive : timeout=5, max=100
Connection : Keep-Alive
Content-Type : text/html ; charset=UTF-8

Nginx

Prenons un autre exemple, celui de la désactivation du vibreur

add_header Permissions-Policy "vibrate 'none' ;"

Ou encore, désactivez la géolocalisation, l'appareil photo et le haut-parleur

add_header Permissions-Policy "geolocation 'none' ; camera 'none' ; speaker 'none' ;"

Voici le résultat après le redémarrage de Nginx

HTTP/1.1 200 OK
Serveur : nginx/1.14.1
Date : Thu, 29 Apr 2021 06:48:35 GMT
Content-Type : text/html
Content-Length : 4057
Last-Modified : Mon, 07 Oct 2019 21:16:24 GMT
Connection : keep-alive
ETag :

5d9bab28-fd9"
Permissions-Policy : geolocation 'none' ; camera 'none' ; speaker 'none' ;
Accept-Ranges : bytes

Toute la configuration de Nginx est placée sous le bloc http dans nginx.conf ou tout autre fichier personnalisé que vous utilisez

Effacer les données du site

Comme vous pouvez le deviner par le nom, l'implémentation d'un en-tête Clear-Site-Data est un excellent moyen de dire à un client d'effacer les données de navigation telles que le cache, le stockage, les cookies ou tout le reste. Cela vous donne plus de contrôle sur la façon dont vous voulez stocker les données du site web dans le navigateur

Apache

Supposons que vous souhaitiez effacer le cache d'origine, vous pouvez ajouter ce qui suit
L'

en-tête définit toujours Clear-Site-Data "cache"

Ce qui produira la réponse HTTP suivante

HTTP/1.1 200 OK
Date : Thu, 29 Apr 2021 07:52:14 GMT
Server : Apache/2.4.37 (centos)
Clear-Site-Data : cache
Last-Modified : Thu, 29 Apr 2021 06:40:41 GMT
ETag : "3-5c116c620a6f1"
Accept-Ranges : bytes
Content-Length : 3
Keep-Alive : timeout=5, max=100
Connection : Keep-Alive
Content-Type : text/html ; charset=UTF-8

ou, pour tout effacer
L'

en-tête est toujours Clear-Site-Data "*"

Nginx

Configurons Nginx pour qu'il efface les cookies

add_header Clear-Site-Data "cookies"

Vous verrez la sortie ci-dessous

HTTP/1.1 200 OK
Serveur : nginx/1.14.1
Date : Thu, 29 Apr 2021 07:55:58 GMT
Content-Type : text/html
Content-Length : 4057
Last-Modified : Mon, 07 Oct 2019 21:16:24 GMT
Connection : keep-alive
ETag : "5d9bab28-fd9"
Clear-Site-Data : cookies
Accept-Ranges : bytes

Conclusion

Sécuriser un site web est un défi, et j'espère qu'en implémentant les en-têtes ci-dessus, vous ajouterez une couche de sécurité. Si vous gérez un site commercial, vous pouvez également envisager d'utiliser un cloud-WAF comme SUCURI pour protéger votre activité en ligne. L'avantage de SUCURI est qu'il offre à la fois sécurité et performance

Si vous optez pour le WAF de SUCURI, vous trouverez une section d'en-têtes supplémentaires sous l'onglet Pare-feu >> Sécurité

sucuri-secure-headers

  • Chandan Kumar
    Auteur
    Chandan Kumar est le fondateur de Geekflare. Il a aidé des millions de personnes à exceller dans le domaine numérique. Passionné de technologie, il s'est donné pour mission d'explorer le monde et d'amplifier la croissance des professionnels et des entreprises.
Merci à nos sponsors
Autres lectures sur la sécurité
Alimentez votre entreprise
Quelques outils et services pour aider votre entreprise à se développer.
  • Invicti utilise le Proof-Based Scanning™ pour vérifier automatiquement les vulnérabilités identifiées et générer des résultats exploitables en quelques heures seulement.
    Essayez Invicti
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, search engine crawler, et tout ce dont vous avez besoin pour collecter des données web.
    Essayez Brightdata
  • Monday.com est un système d'exploitation tout-en-un qui vous aide à gérer vos projets, vos tâches, votre travail, vos ventes, votre CRM, vos opérations, vos flux de travail et bien plus encore.
    Essayez le lundi
  • Intruder est un scanner de vulnérabilité en ligne qui détecte les faiblesses de votre infrastructure en matière de cybersécurité, afin d'éviter des violations de données coûteuses.
    Essayer l'intrus