{"id":2441,"date":"2022-07-27T20:01:28","date_gmt":"2022-07-27T18:01:28","guid":{"rendered":"https:\/\/www.h-hennes.fr\/blog\/?p=2441"},"modified":"2022-08-17T08:15:54","modified_gmt":"2022-08-17T06:15:54","slug":"prestashop-ameliorer-la-securite-de-votre-site-avec-les-csp","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2022\/07\/27\/prestashop-ameliorer-la-securite-de-votre-site-avec-les-csp\/","title":{"rendered":"Prestashop : Am\u00e9liorer la s\u00e9curit\u00e9 de votre site avec les csp"},"content":{"rendered":"\n<p>Les <strong>C<\/strong>ontent <strong>S<\/strong>ecurity <strong>P<\/strong>olicies ( CSP ) vous permettent d&rsquo;am\u00e9liorer la s\u00e9curit\u00e9 de votre site web et d&rsquo;\u00e9viter les injections de contenus externes.<br \/>J&rsquo;avais d\u00e9j\u00e0 fait un article sur leur utilit\u00e9 il y&rsquo;a quelques ann\u00e9es dans le cadre du passage au https : <a href=\"https:\/\/www.h-hennes.fr\/blog\/2017\/05\/16\/detecter-vos-contenus-mixtes-avec-les-csp\/\">D\u00e9tecter vos contenus mixtes avec les CSP<\/a><br \/>Je ne vais pas parapher plus en d\u00e9tails leurs fonctionnement car il existe de tr\u00e8s bonnes ressources sur le sujet :<\/p>\n<p><a href=\"https:\/\/developer.mozilla.org\/fr\/docs\/Web\/HTTP\/CSP\" target=\"_blank\" rel=\"noopener\">https:\/\/developer.mozilla.org\/fr\/docs\/Web\/HTTP\/CSP<\/a> (FR)<br \/><a href=\"https:\/\/content-security-policy.com\/\" target=\"_blank\" rel=\"noopener\">https:\/\/content-security-policy.com\/<\/a> (EN)<\/p>\n<p>Il est important de noter tout de m\u00eame qu&rsquo;il existe plusieurs modes de CSP avec des noms assez explicites : <br \/>&#8211; <em>Content-Security-Policy<\/em> : Le fonctionnement normal<br \/>&#8211; <em>Content-Security-Policy-Report-Only<\/em> : Fonctionnement \u00ab\u00a0Debug\u00a0\u00bb qui permets de r\u00e9cup\u00e9rer les erreurs et avertissements en vue d&rsquo;une correction.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Impl\u00e9mentation dans Prestashop<\/h3>\n\n\n\n<p>Pour l&rsquo;impl\u00e9menter dans Prestashop nous allons d\u00e9finir les CSP via un header http que nous pourrons d\u00e9finir directement en php<br \/>Pour cela il est possible d&rsquo;utiliser le hook <strong>ActionControllerInitBefore<\/strong> qui est appel\u00e9 assez t\u00f4t dans le workflow de l&rsquo;ensemble des controllers ( Front \/ Back )<br \/>Voici comment je l&rsquo;ai impl\u00e9ment\u00e9 :<\/p>\n\n\n\n<pre lang=\"php\" escaped=\"true\">\n\/**\n     * Avant l'initialisation du controller on va d\u00e9finir les CSP\n     * @param array $params\n     * @return void\n     * @throws PrestaShopException\n     *\/\n    public function hookActionControllerInitBefore(array $params): void\n    {\n        if (Configuration::get($this->configPrefix . 'ENABLE')) {\n            $cspHeader = $this->getCspHeaders();\n            if (!empty($cspHeader)) {\n                if (Configuration::get($this->configPrefix . 'MODE') != self::CSP_MODE_REPORT_ONLY) {\n                    header(\"Content-Security-Policy: \" . $cspHeader);\n                }\n                if (Configuration::get($this->configPrefix . 'MODE') != self::CSP_MODE_BLOCK) {\n                    $cspHeader .= \" report-uri \" . $this->getCspReportUri();\n                    header(\"Content-Security-Policy-Report-Only: \" . $cspHeader);\n                }\n            }\n        }\n    }\n<\/pre>\n\n\n\n<p>C&rsquo;est le seul code qui est n\u00e9cessaire pour g\u00e9rer les CSP.<br \/>Afin de vous faciliter la t\u00e2che j&rsquo;ai cr\u00e9\u00e9 un nouveau module qui permets de les configurer directement depuis l&rsquo;administration.<br \/><strong><br \/>Attention dans un premier temps configurer le module en mode \u00ab\u00a0Rapport Uniquement\u00a0\u00bb<\/strong><br \/><br \/>L&rsquo;objectif de cet article n&rsquo;est pas de vous apprendre quoi mettre dans les diff\u00e9rents champs, pour cela je vous renvoie vers le site <a href=\"https:\/\/content-security-policy.com\/\" target=\"_blank\" rel=\"noopener\">https:\/\/content-security-policy.com\/<\/a> (EN) qui d\u00e9taille \u00e0 quoi servent les diff\u00e9rentes politiques.<br \/><br \/>Afin de pouvoir d\u00e9buguer, il y&rsquo;a en bas de la page de configuration un aper\u00e7u des CSP g\u00e9n\u00e9r\u00e9es <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2022\/07\/image.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"484\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2022\/07\/image-1024x484.png\" alt=\"\" class=\"wp-image-2442\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2022\/07\/image-1024x484.png 1024w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2022\/07\/image-300x142.png 300w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2022\/07\/image-768x363.png 768w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2022\/07\/image.png 1238w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Configuration des CSP dans le back office de prestashop<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2022\/07\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"224\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2022\/07\/image-1-1024x224.png\" alt=\"\" class=\"wp-image-2443\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2022\/07\/image-1-1024x224.png 1024w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2022\/07\/image-1-300x66.png 300w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2022\/07\/image-1-768x168.png 768w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2022\/07\/image-1.png 1073w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Pr\u00e9visualisation des CSP g\u00e9n\u00e9r\u00e9es \u00e0 partir de la configuration saisie dans le back office de Prestashop<\/figcaption><\/figure>\n\n\n\n<p>Une fois la premi\u00e8re version de votre configuration CSP termin\u00e9e, attendez quelques jours, puis vous pouvez vous assurer que tout fonctionne correctement en regardant dans l&rsquo;onglet \u00ab\u00a0Logs\u00a0\u00bb, de la configuration du module.<br \/>Celui-ci va lire le contenu du fichier de logs qui contient l&rsquo;ensemble des alertes.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2022\/07\/image-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"744\" height=\"260\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2022\/07\/image-2.png\" alt=\"\" class=\"wp-image-2449\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2022\/07\/image-2.png 744w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2022\/07\/image-2-300x105.png 300w\" sizes=\"auto, (max-width: 744px) 100vw, 744px\" \/><\/a><figcaption>Exemple de log d&rsquo;alerte CSP<\/figcaption><\/figure>\n\n\n\n<p>En fonction des diff\u00e9rentes urls vous pouvez ensuite les autoriser ou non.<br \/>Une fois cette p\u00e9riode pass\u00e9e, vous pouvez activer les 2 modes du module afin de bloquer r\u00e9ellement les ressources non souhait\u00e9es, tout en conservant les logs des probl\u00e8mes rencontr\u00e9s<\/p>\n\n\n\n<p class=\"has-text-align-center has-luminous-vivid-amber-background-color has-background\"><a href=\"https:\/\/shop.h-hennes.fr\/fr\/12-gestion-des-content-security-policy-csp-.html\" target=\"_blank\" rel=\"noopener\">T\u00e9l\u00e9charger le module complet ( et gratuit ) sur la boutique<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les Content Security Policies ( CSP ) vous permettent d&rsquo;am\u00e9liorer la s\u00e9curit\u00e9 de votre site web et d&rsquo;\u00e9viter les injections de contenus externes.J&rsquo;avais d\u00e9j\u00e0 fait un article sur leur utilit\u00e9 il y&rsquo;a quelques ann\u00e9es dans le cadre du passage au https : D\u00e9tecter vos contenus mixtes avec les CSPJe ne vais pas parapher plus en [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[245],"tags":[488,104],"class_list":["post-2441","post","type-post","status-publish","format-standard","hentry","category-prestashop-2","tag-csp","tag-prestashop","prestashop-1-6","prestashop-1-7","prestashop-8-0"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/2441","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/comments?post=2441"}],"version-history":[{"count":5,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/2441\/revisions"}],"predecessor-version":[{"id":4658,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/2441\/revisions\/4658"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=2441"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=2441"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=2441"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}