Guide · 3 min de lecture

Comment ajouter des en-têtes de sécurité sur n’importe quelle pile

Cinq en-têtes couvrent l’essentiel. Voici ce que fait chacun d’eux et les lignes exactes pour votre serveur.

Mis à jour le · HackGrade

Le code et la configuration restent en anglais.

Le socle de départ

  • Strict-Transport-Security : toujours utiliser HTTPS pour ce site (lisez le guide HSTS avant de l’activer).
  • X-Content-Type-Options: nosniff : empêche les navigateurs de deviner le type des fichiers.
  • X-Frame-Options: SAMEORIGIN : empêche d’autres sites d’encadrer le vôtre (clickjacking).
  • Referrer-Policy: strict-origin-when-cross-origin : transmet moins de vos URL aux autres sites.
  • Permissions-Policy : désactive les fonctions du navigateur que vous n’utilisez pas.

nginx

Ajoutez ceci dans votre bloc server { }, puis lancez nginx -t et rechargez.

nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;

Attention : si un bloc location a son propre add_header, nginx ignore ceux du niveau server pour cette location. Répétez-y les en-têtes, ou placez-les dans un fichier include partagé.

Apache (.htaccess)

Nécessite mod_headers (activé chez la plupart des hébergeurs).

.htaccess
<IfModule mod_headers.c>
  Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
  Header always set X-Content-Type-Options "nosniff"
  Header always set X-Frame-Options "SAMEORIGIN"
  Header always set Referrer-Policy "strict-origin-when-cross-origin"
  Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
</IfModule>

Cloudflare

  1. Activez HSTS dans SSL/TLS → Edge Certificates → HTTP Strict Transport Security.
  2. Pour les autres en-têtes, créez une Response Header Transform Rule (Rules → Transform Rules → Modify Response Header) qui définit chaque en-tête comme valeur statique pour toutes les requêtes entrantes.

WordPress sans accès au serveur

Créez wp-content/mu-plugins/security-headers.php. Les extensions must-use se chargent automatiquement.

PHP
<?php
// Security headers for pages WordPress serves.
add_action( 'send_headers', function () {
    header( 'X-Content-Type-Options: nosniff' );
    header( 'X-Frame-Options: SAMEORIGIN' );
    header( 'Referrer-Policy: strict-origin-when-cross-origin' );
    header( 'Permissions-Policy: camera=(), microphone=(), geolocation=()' );
} );

Cela ne couvre que les pages générées par PHP. Les fichiers statiques et certains caches de pages passent outre ; les en-têtes au niveau du serveur ou du CDN sont donc préférables quand vous pouvez les utiliser.

Étape suivante : Content-Security-Policy

CSP est l’en-tête le plus puissant et celui qui risque le plus de casser quelque chose. Suivez le guide CSP et commencez en mode rapport seul.

Sources

Guides associés

Gratuit · Immédiat · Sans inscription

Découvrez votre note avant quelqu’un d’autre.

Analyse passive. Rien n’est attaqué sans votre autorisation.

Gratuit pour commencer. Offres payantes dès 12 $ par mois, ou un rapport unique à 29 $. Voir les tarifs