Security Headers: Sicherheits-Header und CSP für PrestaShop 8 und 9
Security Headers installieren und einrichten: Testmodus, CSP und Verstöße, Nonce und Note A+, HSTS, Permissions-Policy, Scanner, Benachrichtigungen und Verlauf.
DataFirefly Security Headers sendet die HTTP-Sicherheits-Header aus PrestaShop 8 und 9: Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy und Cross-Origin-Opener-Policy. Das Modul wird unter Erweiterte Einstellungen > Sicherheits-Header eingerichtet, gegliedert in sechs Reiter: Übersicht, Allgemein und Testmodus, Content-Security-Policy, HSTS und weitere Header, Permissions-Policy und CSP-Verstöße.
Installation
- Klicken Sie unter Module > Modul-Manager auf Modul hochladen und senden Sie die ZIP-Datei.
- Das Modul wird im Testmodus installiert, mit der CSP im Report-Only-Modus und aktiver Erfassung der Verstöße: Kein Besucher wird blockiert.
- Öffnen Sie Erweiterte Einstellungen > Sicherheits-Header. Der Link Konfigurieren im Modul-Manager führt an dieselbe Stelle.
Livegang Schritt für Schritt
Die Checkliste Livegang in der Übersicht folgt diesen Schritten und zeigt ihren Stand an.
- Testgeräte festlegen. Reiter Allgemein und Testmodus: Klicken Sie auf Meine IP-Adresse hinzufügen, oder kopieren Sie den Testlink und öffnen Sie ihn auf dem Smartphone.
- Genutzte Dienste ankreuzen im Reiter Content-Security-Policy, Block Drittanbieterdienste.
- Den Shop durchklicken von einem Testgerät aus: Startseite, Kategorie, Produktseite, Warenkorb, Bestellvorgang bis zur Zahlung, Kundenkonto. Verstöße erscheinen nach wenigen Minuten im Reiter CSP-Verstöße.
- Verstöße bearbeiten: legitime Quellen erlauben, die übrigen ignorieren.
- Die CSP auf Erzwingen umstellen, sobald 24 Stunden lang kein neuer Verstoß auftaucht.
- Auf Produktionsvorschau klicken, um die Note ohne Testmodus zu sehen, und dann den Testmodus deaktivieren.
- Mit einem öffentlichen Scanner prüfen, etwa securityheaders.com oder Mozilla Observatory, nachdem Sie den CDN-Cache geleert haben, falls Sie einen nutzen.
Der Testmodus
Solange der Testmodus aktiv ist, wird jede Anfrage auf eine dieser Arten behandelt:
- Testgeräte (IP aus der Liste oder Browser, der den Testlink geöffnet hat): alle Header, CSP unabhängig vom gewählten Modus erzwungen, HSTS auf 5 Minuten begrenzt und ohne preload.
- Andere Besucher: nur die CSP im Report-Only-Modus, sofern die Erfassung der Verstöße aktiv ist. Nichts wird blockiert, aber ihre Browser melden, was blockiert würde.
Nach dem Deaktivieren des Testmodus erhalten alle Besucher die vollständige Konfiguration.
Die IP-Liste nimmt IPv4- und IPv6-Adressen sowie CIDR-Bereiche an, eine pro Zeile. Der Testlink markiert den Browser, der ihn öffnet, für 24 Stunden als Testgerät, praktisch für ein Smartphone im Mobilfunknetz mit wechselnder IP. Öffnen Sie dieselbe Adresse mit ?dfsh_test=off, um früher aufzuhören. Neuen Link erstellen macht frühere Links ungültig.
Die Option Im Backoffice anwenden sendet HSTS, X-Frame-Options mit SAMEORIGIN, X-Content-Type-Options und Referrer-Policy im Backoffice. CSP und Permissions-Policy werden dort nie angewendet.
Content-Security-Policy
Direktiven
Jede Direktive nimmt Quellen an, getrennt durch Leerzeichen oder Zeilenumbrüche: Schlüsselwörter ('self', 'none', 'unsafe-inline', 'unsafe-eval'), Hosts (https://www.example.com, *.example.com), Schemata (data:, https:), Nonces und Hashes. Fehlende Anführungszeichen um Schlüsselwörter werden ergänzt. Ein ungültiger Wert wird verworfen und beim Speichern gemeldet. Eine leere Fetch-Direktive fällt auf default-src zurück; andere leere Direktiven werden nicht gesendet.
Drittanbieterdienste
Jeder angekreuzte Dienst fügt seine Domains den benötigten Direktiven hinzu, ohne Ihre eigenen Einträge zu ändern: Google Analytics 4 und Tag Manager, Google Ads, Google Fonts, reCAPTCHA, Google Maps, YouTube, Vimeo, Meta Pixel, TikTok, Pinterest, Stripe, PayPal, Mollie, Cookiebot, Axeptio, Hotjar, Microsoft Clarity, Trustpilot und Crisp. Anbieter ändern ihre Domains gelegentlich: Prüfen Sie nach dem Aktivieren eines Dienstes den Reiter der Verstöße.
Optionen
- Medienserver einbeziehen: fügt die unter Erweiterte Einstellungen > Leistung festgelegten Server den Direktiven für Bilder, Skripte, Styles, Schriften und Medien hinzu.
- Unsichere Anfragen hochstufen: sendet
upgrade-insecure-requestsim Modus Erzwingen, bei einem Shop mit https. - Von der CSP ausgenommene URLs: ein URL-Fragment pro Zeile. Die CSP wird nicht gesendet, wenn die angeforderte Adresse eines davon enthält, etwa eine widerspenstige Zahlungsrückkehrseite.
Nonce und die Note A+
Die Standardkonfiguration behält 'unsafe-inline' in script-src, da PrestaShop-Themes Inline-Skripte verwenden. Scanner begrenzen die Note dann auf A. Für A+:
- Aktivieren Sie im Block Strikte CSP mit Nonce die Option Nonce zu Skripten hinzufügen, bei aktivem Testmodus.
- Das Modul erzeugt auf jeder Seite einen zufälligen Nonce, fügt ihn allen
<script>-Tags hinzu und entfernt'unsafe-inline'ausscript-src. - Klicken Sie sich durch den Shop und bearbeiten Sie die Verstöße. Skripte, die später per JavaScript ohne Nonce eingefügt werden, erscheinen im Protokoll, zum Beispiel benutzerdefinierte HTML-Tags in Google Tag Manager, die die Nonce-Variable von GTM verwenden müssen.
- Sobald das Protokoll keinen
eval-Verstoß mehr zeigt, entfernen Sie'unsafe-eval'ausscript-src.
Die Option Inline-Event-Handler beibehalten fügt script-src-attr 'unsafe-inline' hinzu, damit onclick-Attribute weiter funktionieren. Lassen Sie sie aktiv, außer Ihr Theme und Ihre Module verwenden keine; manche öffentlichen Scanner melden sie.
Für Entwickler: Der Nonce der Seite steht in Smarty als {$dfsh_nonce} und in PHP über DfSecurityHeaders::getNonce() zur Verfügung. Er wird den script-Tags der HTML-Ausgabe automatisch hinzugefügt; diese Zugriffe dienen für Code, der außerhalb dieser Ausgabe erzeugt wird.
Verstoßprotokoll
Die Berichte der Browser werden nach Direktive und blockierter Quelle gruppiert, mit Anzahl der Treffer, Datum der letzten Meldung, einer Beispielseite und bei Inline-Code dessen ersten Zeichen. Browsererweiterungen werden ignoriert. URLs werden ohne Parameter gespeichert, IP-Adressen werden nicht aufbewahrt.
- Erlauben fügt die Quelle der betroffenen Direktive hinzu. War die Direktive leer, übernimmt sie zuerst die Quellen von
default-src. - Ignorieren entfernt die Zeile, ohne die CSP zu ändern.
- Mit den Kontrollkästchen können Sie die Auswahl erlauben oder die Auswahl ignorieren. Die Direktiven-Schaltflächen und das Suchfeld filtern die Liste.
Das Erlauben eines inline– oder eval-Verstoßes fügt 'unsafe-inline' oder 'unsafe-eval' hinzu und schwächt die Richtlinie: Besser ist es, das Skript in eine Datei zu verschieben. Bei aktivem Nonce lassen sich Inline-Skripte ohne Nonce nicht automatisch erlauben. Verstöße, die 30 Tage lang nicht auftreten, werden automatisch gelöscht.
HSTS und weitere Header
- HSTS: Dauer von 5 Minuten bis 2 Jahren, standardmäßig 1 Jahr. Browser merken sich den Header für die gesamte Dauer und verweigern http.
includeSubDomainserzwingt https auf allen Subdomains: Nur aktivieren, wenn alle es unterstützen.preloadwird nur mitincludeSubDomainsund mindestens 1 Jahr gesendet; melden Sie die Domain nur bei hstspreload.org an, wenn Sie sicher sind, das Entfernen dauert Monate. - X-Frame-Options: SAMEORIGIN wird empfohlen; DENY blockiert auch Iframes Ihres eigenen Shops.
- X-Content-Type-Options: sendet
nosniff. - Referrer-Policy: standardmäßig
strict-origin-when-cross-origin. - Cross-Origin-Opener-Policy: standardmäßig aus;
same-origin-allow-popupshält die Zahlungsfenster von PayPal funktionsfähig. - X-Powered-By-Header entfernen verbirgt die PHP-Version, die manche Server preisgeben.
Permissions-Policy
Für jede der 19 Funktionen: Blockiert deaktiviert sie überall, Nur diese Website erlaubt sie auf Ihrer Domain und den eingetragenen zusätzlichen Ursprüngen, Alle Websites gibt sie frei, Nicht gesetzt behält das Verhalten des Browsers. Funktionen, die ein Shop nicht braucht (Kamera, Mikrofon, Standort, Sensoren, USB…), sind standardmäßig blockiert, und payment ist auf die Website beschränkt. Der Dienst Stripe fügt seinen eigenen Ursprung zu payment hinzu.
Scanner und Note
Aktuelle Header analysieren ruft eine Shopseite vom Server aus ab und zeigt die Note, die Details je Header, preisgegebene Informationen und die rohen Header. Nur die Domains des Shops lassen sich analysieren. Produktionsvorschau simuliert die Konfiguration ohne Testmodus. Die Note folgt derselben Gewichtung wie öffentliche Scanner und ist ein Richtwert. Die letzte Analyse und der Notenverlauf bleiben nach dem Neuladen sichtbar.
Blockierungs-Benachrichtigungen
Aktivieren Sie im Reiter Allgemein und Testmodus die E-Mail-Benachrichtigungen und tragen Sie bis zu 5 Empfänger ein. Wird die CSP erzwungen und ist der Testmodus aus, löst jede tatsächlich blockierte Ressource, die noch nie gesehen wurde, eine E-Mail mit Direktive, Quelle und Seite aus. Neue Einträge werden gebündelt, höchstens eine E-Mail pro Stunde. Test-E-Mail senden prüft die Einrichtung; kommt nichts an, prüfen Sie Erweiterte Einstellungen > E-Mail.
Verlauf, Export und Import
Jede Änderung bewahrt die vorherigen Einstellungen mit Datum, Mitarbeiter und den Unterschieden zum aktuellen Stand. Die letzten 15 Versionen bleiben erhalten; Wiederherstellen kehrt zu einer davon zurück, und der ersetzte Stand kommt in den Verlauf.
Einstellungen herunterladen erzeugt eine JSON-Datei ohne die geheimen Tokens, die sich in einen anderen Shop importieren lässt, etwa von Staging nach Produktion. Ein Import aktiviert immer den Testmodus. Die Test-IP-Adressen werden mit importiert: Prüfen Sie sie.
Cache, CDN und Server-Header
- Ein CDN oder Seiten-Cache kann alte Header ausliefern: Leeren Sie ihn nach jeder Änderung.
- Setzt Ihr Hoster oder Cloudflare bereits Header, meldet der Scanner die Doppelungen. Entfernen Sie sie auf dem Server oder deaktivieren Sie den Header im Modul.
- Um die Header vom Server setzen zu lassen, kopieren Sie den Apache- oder Nginx-Block aus der Übersicht und deaktivieren Sie das Modul. Die Meldung der Verstöße und der Nonce, die vom Modul abhängen, sind nicht enthalten.
Wenn etwas nicht funktioniert
- Eine Seite funktioniert nicht mehr: Stellen Sie die vorherige Version aus dem Verlauf wieder her, oder setzen Sie die CSP bis zur Korrektur wieder auf Report-Only.
- Alles abschalten: Deaktivieren Sie Sicherheits-Header senden im Reiter Allgemein oder das Modul selbst.
- HSTS: Ein Browser, der HSTS erhalten hat, verweigert http bis zum Ablauf der Dauer, auch nach Deaktivierung des Moduls. Deshalb erhalten Testgeräte nur 5 Minuten.