Security Headers: beveiligingsheaders en CSP voor PrestaShop 8 en 9
Security Headers installeren en instellen: testmodus, CSP en overtredingen, nonce en A+-score, HSTS, Permissions-Policy, scanner, meldingen en geschiedenis.
DataFirefly Security Headers verstuurt de HTTP-beveiligingsheaders vanuit PrestaShop 8 en 9: Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy en Cross-Origin-Opener-Policy. De module wordt ingesteld via Geavanceerde instellingen > Beveiligingsheaders, verdeeld over zes tabbladen: Dashboard, Algemeen en testmodus, Content-Security-Policy, HSTS en andere headers, Permissions-Policy en CSP-overtredingen.
Installatie
- Klik in Modules > Modulebeheer op Een module uploaden en verstuur het ZIP-bestand.
- De module wordt in testmodus geïnstalleerd, met de CSP in Report-Only en het verzamelen van overtredingen aan: geen enkele bezoeker wordt geblokkeerd.
- Open Geavanceerde instellingen > Beveiligingsheaders. De link Configureren in Modulebeheer leidt naar dezelfde plek.
Live gaan, stap voor stap
De checklist Live gaan op het dashboard volgt deze stappen en toont hun status.
- Geef uw testapparaten op. Tabblad Algemeen en testmodus: klik op Mijn IP-adres toevoegen, of kopieer de testlink en open hem op uw telefoon.
- Vink de diensten aan die u gebruikt op het tabblad Content-Security-Policy, blok Diensten van derden.
- Blader door de winkel vanaf een testapparaat: home, categorie, productpagina, winkelwagen, afrekenen tot aan de betaling, klantaccount. Overtredingen verschijnen binnen enkele minuten op het tabblad CSP-overtredingen.
- Verwerk de overtredingen: sta legitieme bronnen toe, negeer de andere.
- Zet de CSP op Afdwingen zodra er 24 uur lang geen nieuwe overtreding verschijnt.
- Klik op Productievoorbeeld op het dashboard om de score zonder testmodus te zien en schakel daarna de testmodus uit.
- Controleer met een openbare scanner zoals securityheaders.com of Mozilla Observatory, nadat u de cache van uw CDN hebt geleegd als u er een gebruikt.
De testmodus
Zolang de testmodus actief is, krijgt elk verzoek een van deze behandelingen:
- Testapparaten (IP uit de lijst of browser die de testlink heeft geopend): alle headers, CSP afgedwongen ongeacht de gekozen modus, HSTS beperkt tot 5 minuten en zonder preload.
- Andere bezoekers: alleen de CSP in Report-Only, als het verzamelen van overtredingen aan staat. Er wordt niets geblokkeerd, maar hun browsers melden wat geblokkeerd zou worden.
Zodra de testmodus uit staat, krijgen alle bezoekers de volledige configuratie.
De IP-lijst accepteert IPv4- en IPv6-adressen en CIDR-bereiken, één per regel. De testlink markeert de browser die hem opent 24 uur lang als testapparaat, handig voor een telefoon via 4G met een wisselend IP-adres. Open hetzelfde adres met ?dfsh_test=off om eerder te stoppen. Nieuwe link aanmaken maakt eerdere links ongeldig.
De optie Toepassen op de back-office verstuurt in de back-office HSTS, X-Frame-Options met SAMEORIGIN, X-Content-Type-Options en Referrer-Policy. De CSP en Permissions-Policy worden daar nooit toegepast.
Content-Security-Policy
Directives
Elke directive accepteert bronnen gescheiden door spaties of regeleinden: sleutelwoorden ('self', 'none', 'unsafe-inline', 'unsafe-eval'), hosts (https://www.example.com, *.example.com), schema’s (data:, https:), nonces en hashes. Ontbrekende aanhalingstekens rond sleutelwoorden worden toegevoegd. Een ongeldige waarde wordt weggelaten en bij het opslaan gemeld. Een lege fetch-directive valt terug op default-src; andere lege directives worden niet verzonden.
Diensten van derden
Elke aangevinkte dienst voegt zijn domeinen toe aan de directives die hij nodig heeft, zonder uw eigen invoer te wijzigen: Google Analytics 4 en Tag Manager, Google Ads, Google Fonts, reCAPTCHA, Google Maps, YouTube, Vimeo, Meta Pixel, TikTok, Pinterest, Stripe, PayPal, Mollie, Cookiebot, Axeptio, Hotjar, Microsoft Clarity, Trustpilot en Crisp. Aanbieders wijzigen soms hun domeinen: bekijk het tabblad met overtredingen nadat u een dienst hebt ingeschakeld.
Opties
- Mediaservers opnemen: voegt de servers uit Geavanceerde instellingen > Prestaties toe aan de directives voor afbeeldingen, scripts, stijlen, lettertypen en media.
- Onveilige verzoeken upgraden: verstuurt
upgrade-insecure-requestsin de modus Afdwingen, bij een winkel met https. - URL’s uitgesloten van de CSP: één URL-fragment per regel. De CSP wordt niet verzonden als het opgevraagde adres er een bevat, bijvoorbeeld een lastige terugkeerpagina na betaling.
Nonce en de score A+
De standaardconfiguratie houdt 'unsafe-inline' in script-src, omdat PrestaShop-thema’s inline scripts gebruiken. Scanners houden de score dan op A. Om A+ te halen:
- Schakel in het blok Strikte CSP met nonce de optie Nonce aan scripts toevoegen in, met de testmodus actief.
- De module maakt op elke pagina een willekeurige nonce aan, voegt die toe aan alle
<script>-tags en verwijdert'unsafe-inline'uitscript-src. - Blader door de winkel en verwerk de overtredingen. Scripts die later via JavaScript zonder nonce worden ingevoegd, verschijnen in het logboek, bijvoorbeeld aangepaste HTML-tags in Google Tag Manager, die de nonce-variabele van GTM moeten gebruiken.
- Zodra het logboek geen
eval-overtreding meer toont, verwijdert u'unsafe-eval'uitscript-src.
De optie Inline event handlers behouden voegt script-src-attr 'unsafe-inline' toe, zodat onclick-attributen blijven werken. Laat haar aan, tenzij uw thema en modules er geen gebruiken; sommige openbare scanners markeren haar.
Voor ontwikkelaars: de nonce van de pagina is beschikbaar in Smarty als {$dfsh_nonce} en in PHP via DfSecurityHeaders::getNonce(). Hij wordt automatisch toegevoegd aan de script-tags van de HTML-uitvoer; deze toegang dient voor code die buiten die uitvoer wordt gemaakt.
Logboek van overtredingen
Browsermeldingen worden gegroepeerd per directive en geblokkeerde bron, met het aantal keren, de datum van de laatste melding, een voorbeeldpagina en, voor inline code, de eerste tekens ervan. Browserextensies worden genegeerd. URL’s worden zonder parameters opgeslagen en er wordt geen IP-adres bewaard.
- Toestaan voegt de bron toe aan de betreffende directive. Was de directive leeg, dan neemt die eerst de bronnen van
default-srcover. - Negeren verwijdert de regel zonder de CSP te wijzigen.
- Met de selectievakjes kunt u de Selectie toestaan of de Selectie negeren. De directiveknoppen en het zoekveld filteren de lijst.
Een inline– of eval-overtreding toestaan voegt 'unsafe-inline' of 'unsafe-eval' toe, wat het beleid verzwakt: het script naar een bestand verplaatsen is beter. Met de nonce actief kunnen inline scripts zonder nonce niet automatisch worden toegestaan. Overtredingen die 30 dagen niet zijn gezien, worden automatisch verwijderd.
HSTS en andere headers
- HSTS: duur van 5 minuten tot 2 jaar, standaard 1 jaar. Browsers onthouden de header gedurende die hele duur en weigeren http.
includeSubDomainsdwingt https af op elk subdomein: schakel het alleen in als ze het allemaal ondersteunen.preloadwordt alleen verzonden metincludeSubDomainsen minstens 1 jaar; meld het domein alleen aan bij hstspreload.org als u zeker bent, verwijdering duurt maanden. - X-Frame-Options: SAMEORIGIN wordt aanbevolen; DENY blokkeert ook iframes van uw eigen winkel.
- X-Content-Type-Options: verstuurt
nosniff. - Referrer-Policy: standaard
strict-origin-when-cross-origin. - Cross-Origin-Opener-Policy: standaard uit;
same-origin-allow-popupshoudt de betaalvensters van PayPal werkend. - X-Powered-By-header verwijderen verbergt de PHP-versie die sommige servers tonen.
Permissions-Policy
Voor elk van de 19 functies: Geblokkeerd schakelt haar overal uit, Alleen deze site staat haar toe op uw domein en de ingevulde extra origins, Alle sites zet haar open, Niet ingesteld behoudt het gedrag van de browser. Functies die een winkel niet nodig heeft (camera, microfoon, locatie, sensoren, USB…) zijn standaard geblokkeerd, en payment is beperkt tot de site. De dienst Stripe voegt zijn eigen origin toe aan payment.
Scanner en score
Huidige headers analyseren vraagt een winkelpagina op vanaf de server en toont de score, de details per header, informatielekken en de ruwe headers. Alleen de domeinen van de winkel kunnen worden geanalyseerd. Productievoorbeeld simuleert de configuratie zonder testmodus. De score volgt dezelfde weging als openbare scanners en is indicatief. De laatste analyse en de scoregeschiedenis blijven zichtbaar na het herladen.
Blokkeringsmeldingen
Schakel op het tabblad Algemeen en testmodus de E-mailmeldingen in en vul maximaal 5 ontvangers in. Als de CSP wordt afgedwongen en de testmodus uit staat, leidt elke bron die echt wordt geblokkeerd en nog nooit was gezien tot een e-mail met de directive, de bron en de pagina. Nieuwe meldingen worden gebundeld, maximaal één e-mail per uur. Testmail verzenden controleert de instelling; komt er niets aan, controleer dan Geavanceerde instellingen > E-mail.
Geschiedenis, export en import
Elke wijziging bewaart de vorige instellingen, met datum, medewerker en de verschillen met de huidige stand. De laatste 15 versies blijven bewaard; Herstellen gaat terug naar een ervan, en de vervangen stand komt in de geschiedenis.
Instellingen downloaden maakt een JSON-bestand zonder de geheime tokens, om te importeren in een andere winkel, bijvoorbeeld van staging naar productie. Een import schakelt altijd de testmodus in. De test-IP-adressen worden mee geïmporteerd: controleer ze.
Cache, CDN en serverheaders
- Een CDN of paginacache kan oude headers leveren: leeg hem na elke wijziging.
- Voegt uw host of Cloudflare al headers toe, dan meldt de scanner de dubbele. Verwijder ze op de server of schakel de header in de module uit.
- Wilt u de headers door de server laten versturen, kopieer dan het Apache- of Nginx-blok van het dashboard en schakel de module uit. Het melden van overtredingen en de nonce, die van de module afhangen, zijn niet inbegrepen.
Bij problemen
- Een pagina werkt niet meer: herstel de vorige versie uit de geschiedenis, of zet de CSP terug op Report-Only zolang u het oplost.
- Alles uitschakelen: schakel Beveiligingsheaders verzenden uit op het tabblad Algemeen, of schakel de module uit.
- HSTS: een browser die HSTS heeft ontvangen, weigert http tot de duur verloopt, ook nadat de module is uitgeschakeld. Daarom krijgen testapparaten slechts 5 minuten.