PS PrestaShop Intermédiaire

Security Headers : en-têtes de sécurité et CSP pour PrestaShop 8 et 9

Installer et configurer Security Headers : mode test, CSP et violations, nonce et note A+, HSTS, Permissions-Policy, scanner, alertes et historique.

Mis à jour Version du module 1.1.0

DataFirefly Security Headers envoie les en-têtes de sécurité HTTP depuis PrestaShop 8 et 9 : Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy et Cross-Origin-Opener-Policy. Le module se règle dans Paramètres avancés > En-têtes de sécurité, organisé en six onglets : Tableau de bord, Général et mode test, Content-Security-Policy, HSTS et autres en-têtes, Permissions-Policy et Violations CSP.

Installation

  1. Dans Modules > Gestionnaire de modules, cliquez sur Installer un module et envoyez le fichier ZIP.
  2. Le module s’installe en mode test, avec la CSP en Report-Only et la collecte des violations active : aucun visiteur n’est bloqué.
  3. Ouvrez Paramètres avancés > En-têtes de sécurité. Le lien Configurer du gestionnaire de modules mène au même endroit.

Mise en production pas à pas

La checklist Mise en production du tableau de bord suit ces étapes et affiche leur état.

  1. Déclarez vos appareils de test. Onglet Général et mode test : cliquez sur Ajouter mon adresse IP, ou copiez le lien de test et ouvrez-le sur votre téléphone.
  2. Cochez les services que vous utilisez dans l’onglet Content-Security-Policy, bloc Services tiers.
  3. Parcourez la boutique depuis un appareil de test : accueil, catégorie, fiche produit, panier, tunnel de commande jusqu’au paiement, compte client. Les violations arrivent dans l’onglet Violations CSP en quelques minutes.
  4. Traitez les violations : autorisez les sources légitimes, ignorez les autres.
  5. Passez la CSP en mode Appliquer quand aucune nouvelle violation n’apparaît pendant 24 heures.
  6. Cliquez sur Aperçu production sur le tableau de bord pour voir la note sans le mode test, puis désactivez le mode test.
  7. Vérifiez sur un scanner public comme securityheaders.com ou Mozilla Observatory, après avoir vidé le cache de votre CDN si vous en utilisez un.

Le mode test

Tant que le mode test est actif, chaque requête reçoit l’un de ces traitements :

  • Appareils de test (IP de la liste ou navigateur ouvert avec le lien de test) : tous les en-têtes, CSP appliquée quel que soit le mode choisi, HSTS limité à 5 minutes et sans preload.
  • Autres visiteurs : seulement la CSP en Report-Only, si la collecte des violations est active. Rien n’est bloqué, mais leurs navigateurs signalent ce qui le serait.

Une fois le mode test désactivé, tous les visiteurs reçoivent la configuration complète.

La liste des IP accepte des adresses IPv4 et IPv6 et des plages CIDR, une par ligne. Le lien de test marque le navigateur qui l’ouvre comme appareil de test pendant 24 heures, pratique pour un téléphone en 4G dont l’IP change. Ouvrez la même adresse avec ?dfsh_test=off pour arrêter plus tôt. Créer un nouveau lien invalide les liens précédents.

L’option Appliquer au back-office envoie HSTS, X-Frame-Options en SAMEORIGIN, X-Content-Type-Options et Referrer-Policy dans le back-office. La CSP et Permissions-Policy n’y sont jamais appliquées.

Content-Security-Policy

Directives

Chaque directive accepte des sources séparées par des espaces ou des retours à la ligne : mots-clés ('self', 'none', 'unsafe-inline', 'unsafe-eval'), hôtes (https://www.example.com, *.example.com), schémas (data:, https:), nonces et empreintes. Les guillemets des mots-clés sont ajoutés s’ils manquent. Une valeur invalide est ignorée et signalée à l’enregistrement. Une directive de chargement vide reprend default-src ; les autres directives vides ne sont pas envoyées.

Services tiers

Chaque service coché ajoute ses domaines aux directives nécessaires, sans modifier vos saisies : Google Analytics 4 et Tag Manager, Google Ads, Google Fonts, reCAPTCHA, Google Maps, YouTube, Vimeo, Meta Pixel, TikTok, Pinterest, Stripe, PayPal, Mollie, Cookiebot, Axeptio, Hotjar, Microsoft Clarity, Trustpilot et Crisp. Les fournisseurs changent parfois de domaines : consultez l’onglet des violations après avoir activé un service.

Options

  • Inclure les serveurs de médias : ajoute les serveurs définis dans Paramètres avancés > Performances aux directives des images, scripts, styles, polices et médias.
  • Mettre à niveau les requêtes non sécurisées : envoie upgrade-insecure-requests en mode Appliquer, sur une boutique en https.
  • URL exclues de la CSP : un fragment d’URL par ligne. La CSP n’est pas envoyée quand l’adresse demandée contient l’un d’eux, par exemple une page de retour de paiement récalcitrante.

Nonce et note A+

La configuration par défaut garde 'unsafe-inline' dans script-src, car les thèmes PrestaShop utilisent des scripts inline. Les scanners plafonnent alors la note à A. Pour viser A+ :

  1. Dans le bloc CSP stricte avec nonce, activez Ajouter un nonce aux scripts, mode test actif.
  2. Le module génère un nonce aléatoire à chaque page, l’ajoute à toutes les balises <script> et retire 'unsafe-inline' de script-src.
  3. Parcourez la boutique et traitez les violations. Les scripts insérés plus tard par JavaScript sans nonce apparaissent dans le journal, par exemple les balises HTML personnalisées de Google Tag Manager, qui doivent utiliser la variable nonce de GTM.
  4. Quand le journal ne montre plus de violation eval, retirez 'unsafe-eval' de script-src.

L’option Conserver les gestionnaires d’événements inline ajoute script-src-attr 'unsafe-inline' pour que les attributs onclick continuent de fonctionner. Laissez-la active sauf si votre thème et vos modules n’en utilisent pas ; certains scanners publics la signalent.

Un module de cache de page complète stocke le HTML avec le nonce du premier visiteur, qui ne correspond plus aux suivants. Excluez ces pages du cache ou laissez le nonce désactivé. Le cache natif de PrestaShop n’est pas concerné.

Pour les développeurs : le nonce de la page est disponible en Smarty dans {$dfsh_nonce} et en PHP avec DfSecurityHeaders::getNonce(). Il est ajouté automatiquement aux balises script de la sortie HTML ; ces accès servent pour du code produit hors de cette sortie.

Journal des violations

Les rapports des navigateurs sont regroupés par directive et par source bloquée, avec le nombre d’occurrences, la date du dernier signalement, une page d’exemple et, pour du code inline, ses premiers caractères. Les extensions de navigateur sont ignorées. Les URL sont stockées sans paramètres et aucune IP n’est conservée.

  • Autoriser ajoute la source à la directive concernée. Si la directive était vide, elle reprend d’abord les sources de default-src.
  • Ignorer retire la ligne sans modifier la CSP.
  • Les cases à cocher permettent d’Autoriser la sélection ou d’Ignorer la sélection. Les boutons de directive et le champ de recherche filtrent la liste.

Autoriser une violation inline ou eval ajoute 'unsafe-inline' ou 'unsafe-eval', ce qui affaiblit la politique : déplacer le script dans un fichier est préférable. Avec le nonce actif, les scripts inline sans nonce ne peuvent pas être autorisés automatiquement. Les violations absentes depuis 30 jours sont supprimées automatiquement.

HSTS et autres en-têtes

  • HSTS : durée de 5 minutes à 2 ans, 1 an par défaut. Les navigateurs retiennent l’en-tête pendant toute cette durée et refusent le http. includeSubDomains force le https sur chaque sous-domaine : ne l’activez que si tous le gèrent. preload n’est envoyé qu’avec includeSubDomains et au moins 1 an ; ne soumettez le domaine à hstspreload.org que si vous êtes sûr, le retrait prend des mois.
  • X-Frame-Options : SAMEORIGIN est recommandé ; DENY bloque aussi les iframes de votre propre boutique.
  • X-Content-Type-Options : envoie nosniff.
  • Referrer-Policy : strict-origin-when-cross-origin par défaut.
  • Cross-Origin-Opener-Policy : désactivé par défaut ; same-origin-allow-popups garde fonctionnelles les fenêtres de paiement PayPal.
  • Supprimer l’en-tête X-Powered-By masque la version de PHP exposée par certains serveurs.

Permissions-Policy

Pour chacune des 19 fonctionnalités : Bloqué la désactive partout, Ce site uniquement l’autorise sur votre domaine et sur les origines supplémentaires saisies, Tous les sites l’ouvre, Non défini garde le comportement du navigateur. Les fonctionnalités inutiles à une boutique (caméra, micro, géolocalisation, capteurs, USB…) sont bloquées par défaut, et payment est limité au site. Le service Stripe ajoute lui-même son origine à payment.

Scanner et note

Analyser les en-têtes actuels interroge une page de la boutique depuis le serveur et affiche la note, le détail par en-tête, les fuites d’information et les en-têtes bruts. Seuls les domaines de la boutique peuvent être analysés. Aperçu production simule la configuration sans mode test. La note suit la même pondération que les scanners publics et reste indicative. La dernière analyse et l’historique des notes restent affichés au rechargement.

Alertes de blocage

Dans l’onglet Général et mode test, activez les Alertes par email et saisissez jusqu’à 5 destinataires. Quand la CSP est appliquée et le mode test désactivé, chaque ressource réellement bloquée qui n’avait jamais été vue déclenche un email, avec la directive, la source et la page. Les nouveautés sont regroupées, au plus un email par heure. Envoyer un email de test vérifie la configuration ; si rien n’arrive, contrôlez Paramètres avancés > E-mail.

Historique, export et import

Chaque modification conserve les réglages précédents, avec la date, l’employé et les différences avec l’état actuel. Les 15 dernières versions sont gardées ; Restaurer revient à l’une d’elles, et l’état remplacé rejoint l’historique.

Télécharger les réglages produit un fichier JSON sans les jetons secrets, à importer sur une autre boutique, par exemple de la préproduction vers la production. Un import active toujours le mode test. Les IP de test sont importées aussi : vérifiez-les.

Cache, CDN et en-têtes du serveur

  • Un CDN ou un cache de page peut servir d’anciens en-têtes : videz-le après chaque changement.
  • Si votre hébergeur ou Cloudflare ajoute déjà certains en-têtes, le scanner signale les doublons. Retirez-les côté serveur ou désactivez l’en-tête dans le module.
  • Pour confier les en-têtes au serveur, copiez le bloc Apache ou Nginx du tableau de bord, puis désactivez le module. La remontée des violations et le nonce, qui dépendent du module, ne sont pas inclus.

En cas de problème

  • Une page ne fonctionne plus : restaurez la version précédente dans l’historique, ou repassez la CSP en Report-Only le temps de corriger.
  • Tout couper : désactivez Envoyer les en-têtes de sécurité dans l’onglet Général, ou désactivez le module.
  • HSTS : un navigateur qui a reçu HSTS refuse le http jusqu’à l’expiration de la durée, même après désactivation du module. C’est pourquoi les appareils de test reçoivent seulement 5 minutes.
Cette page vous a-t-elle été utile ?

Toujours bloqué ? Contactez le support