Security Headers: nagłówki bezpieczeństwa i CSP dla PrestaShop 8 i 9
Instalacja i konfiguracja Security Headers: tryb testowy, CSP i naruszenia, nonce i ocena A+, HSTS, Permissions-Policy, skaner, alerty i historia.
DataFirefly Security Headers wysyła nagłówki bezpieczeństwa HTTP z PrestaShop 8 i 9: Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy i Cross-Origin-Opener-Policy. Moduł konfiguruje się w Zaawansowane > Nagłówki bezpieczeństwa, w sześciu kartach: Pulpit, Ogólne i tryb testowy, Content-Security-Policy, HSTS i inne nagłówki, Permissions-Policy oraz Naruszenia CSP.
Instalacja
- W Moduły > Menedżer modułów kliknij Załaduj moduł i wyślij plik ZIP.
- Moduł instaluje się w trybie testowym, z CSP w trybie Report-Only i włączonym zbieraniem naruszeń: żaden odwiedzający nie jest blokowany.
- Otwórz Zaawansowane > Nagłówki bezpieczeństwa. Link Konfiguruj w menedżerze modułów prowadzi w to samo miejsce.
Uruchomienie produkcyjne krok po kroku
Lista Uruchomienie produkcyjne na pulpicie prowadzi przez te kroki i pokazuje ich stan.
- Wskaż urządzenia testowe. Karta Ogólne i tryb testowy: kliknij Dodaj mój adres IP albo skopiuj link testowy i otwórz go na telefonie.
- Zaznacz używane usługi na karcie Content-Security-Policy, w bloku Usługi zewnętrzne.
- Przejrzyj sklep z urządzenia testowego: strona główna, kategoria, karta produktu, koszyk, proces zamówienia aż do płatności, konto klienta. Naruszenia pojawiają się na karcie Naruszenia CSP w ciągu kilku minut.
- Obsłuż naruszenia: zezwól na prawidłowe źródła, zignoruj pozostałe.
- Przełącz CSP na Wymuszaj, gdy przez 24 godziny nie pojawi się nowe naruszenie.
- Kliknij Podgląd produkcyjny na pulpicie, aby zobaczyć ocenę bez trybu testowego, a następnie wyłącz tryb testowy.
- Sprawdź w publicznym skanerze, takim jak securityheaders.com lub Mozilla Observatory, po wyczyszczeniu cache CDN, jeśli z niego korzystasz.
Tryb testowy
Dopóki tryb testowy jest włączony, każde żądanie jest obsługiwane na jeden z tych sposobów:
- Urządzenia testowe (IP z listy lub przeglądarka otwarta linkiem testowym): wszystkie nagłówki, CSP wymuszona niezależnie od wybranego trybu, HSTS ograniczony do 5 minut i bez preload.
- Pozostali odwiedzający: tylko CSP w trybie Report-Only, jeśli zbieranie naruszeń jest włączone. Nic nie jest blokowane, ale ich przeglądarki zgłaszają, co zostałoby zablokowane.
Po wyłączeniu trybu testowego wszyscy odwiedzający otrzymują pełną konfigurację.
Lista IP przyjmuje adresy IPv4 i IPv6 oraz zakresy CIDR, jeden w wierszu. Link testowy oznacza przeglądarkę, która go otworzy, jako urządzenie testowe na 24 godziny, co przydaje się dla telefonu w sieci komórkowej ze zmiennym IP. Otwórz ten sam adres z ?dfsh_test=off, aby zakończyć wcześniej. Utwórz nowy link unieważnia poprzednie linki.
Opcja Stosuj w panelu administracyjnym wysyła w panelu HSTS, X-Frame-Options z wartością SAMEORIGIN, X-Content-Type-Options i Referrer-Policy. CSP i Permissions-Policy nigdy nie są tam stosowane.
Content-Security-Policy
Dyrektywy
Każda dyrektywa przyjmuje źródła oddzielone spacjami lub znakami nowej linii: słowa kluczowe ('self', 'none', 'unsafe-inline', 'unsafe-eval'), hosty (https://www.example.com, *.example.com), schematy (data:, https:), nonce i skróty. Brakujące apostrofy wokół słów kluczowych są dodawane. Nieprawidłowa wartość jest odrzucana i zgłaszana przy zapisie. Pusta dyrektywa pobierania korzysta z default-src; pozostałe puste dyrektywy nie są wysyłane.
Usługi zewnętrzne
Każda zaznaczona usługa dodaje swoje domeny do potrzebnych dyrektyw, bez zmiany Twoich wpisów: Google Analytics 4 i Tag Manager, Google Ads, Google Fonts, reCAPTCHA, Google Maps, YouTube, Vimeo, Meta Pixel, TikTok, Pinterest, Stripe, PayPal, Mollie, Cookiebot, Axeptio, Hotjar, Microsoft Clarity, Trustpilot i Crisp. Dostawcy czasem zmieniają domeny: po włączeniu usługi sprawdź kartę naruszeń.
Opcje
- Uwzględnij serwery multimediów: dodaje serwery ustawione w Zaawansowane > Wydajność do dyrektyw obrazów, skryptów, stylów, czcionek i multimediów.
- Podnoś niezabezpieczone żądania: wysyła
upgrade-insecure-requestsw trybie Wymuszaj, w sklepie na https. - Adresy URL wyłączone z CSP: jeden fragment adresu URL w wierszu. CSP nie jest wysyłana, gdy żądany adres zawiera jeden z nich, na przykład problematyczną stronę powrotu z płatności.
Nonce i ocena A+
Domyślna konfiguracja pozostawia 'unsafe-inline' w script-src, ponieważ motywy PrestaShop używają skryptów inline. Skanery ograniczają wtedy ocenę do A. Aby celować w A+:
- W bloku Ścisła CSP z nonce włącz Dodawaj nonce do skryptów przy aktywnym trybie testowym.
- Moduł generuje losowy nonce na każdej stronie, dodaje go do wszystkich znaczników
<script>i usuwa'unsafe-inline'zscript-src. - Przejrzyj sklep i obsłuż naruszenia. Skrypty wstawiane później przez JavaScript bez nonce pojawiają się w dzienniku, na przykład niestandardowe tagi HTML w Google Tag Manager, które muszą używać zmiennej nonce GTM.
- Gdy dziennik nie pokazuje już naruszeń
eval, usuń'unsafe-eval'zscript-src.
Opcja Zachowaj wbudowane procedury obsługi zdarzeń dodaje script-src-attr 'unsafe-inline', aby atrybuty onclick dalej działały. Pozostaw ją włączoną, chyba że motyw i moduły ich nie używają; niektóre publiczne skanery ją zgłaszają.
Dla programistów: nonce strony jest dostępny w Smarty jako {$dfsh_nonce}, a w PHP przez DfSecurityHeaders::getNonce(). Jest automatycznie dodawany do znaczników script w wyjściu HTML; te odwołania służą do kodu generowanego poza tym wyjściem.
Dziennik naruszeń
Raporty przeglądarek są grupowane według dyrektywy i zablokowanego źródła, z liczbą wystąpień, datą ostatniego zgłoszenia, przykładową stroną oraz, dla kodu inline, jego pierwszymi znakami. Rozszerzenia przeglądarki są pomijane. Adresy URL są zapisywane bez parametrów i żaden adres IP nie jest przechowywany.
- Zezwól dodaje źródło do właściwej dyrektywy. Jeśli dyrektywa była pusta, najpierw przejmuje źródła z
default-src. - Ignoruj usuwa wiersz bez zmiany CSP.
- Pola wyboru pozwalają użyć Zezwól na zaznaczone lub Ignoruj zaznaczone. Przyciski dyrektyw i pole wyszukiwania filtrują listę.
Zezwolenie na naruszenie inline lub eval dodaje 'unsafe-inline' lub 'unsafe-eval', co osłabia zasady: lepiej przenieść skrypt do pliku. Przy aktywnym nonce skryptów inline bez nonce nie można zezwolić automatycznie. Naruszenia niewidziane od 30 dni są usuwane automatycznie.
HSTS i inne nagłówki
- HSTS: czas od 5 minut do 2 lat, domyślnie 1 rok. Przeglądarki pamiętają nagłówek przez cały ten czas i odrzucają http.
includeSubDomainswymusza https na wszystkich subdomenach: włącz tylko, jeśli wszystkie go obsługują.preloadjest wysyłany tylko zincludeSubDomainsi co najmniej 1 rokiem; zgłaszaj domenę do hstspreload.org tylko, gdy masz pewność, usunięcie z listy trwa miesiącami. - X-Frame-Options: zalecane SAMEORIGIN; DENY blokuje też ramki iframe Twojego sklepu.
- X-Content-Type-Options: wysyła
nosniff. - Referrer-Policy: domyślnie
strict-origin-when-cross-origin. - Cross-Origin-Opener-Policy: domyślnie wyłączona;
same-origin-allow-popupszachowuje działanie okien płatności PayPal. - Usuń nagłówek X-Powered-By ukrywa wersję PHP ujawnianą przez niektóre serwery.
Permissions-Policy
Dla każdej z 19 funkcji: Zablokowane wyłącza ją wszędzie, Tylko ta witryna zezwala na nią w Twojej domenie i podanych dodatkowych źródłach, Wszystkie witryny ją otwiera, Nie ustawiono zachowuje domyślne działanie przeglądarki. Funkcje, których sklep nie potrzebuje (kamera, mikrofon, geolokalizacja, czujniki, USB…), są domyślnie zablokowane, a payment jest ograniczone do witryny. Usługa Stripe sama dodaje swoje źródło do payment.
Skaner i ocena
Analizuj bieżące nagłówki pobiera stronę sklepu z serwera i pokazuje ocenę, szczegóły dla każdego nagłówka, wycieki informacji i surowe nagłówki. Analizować można tylko domeny sklepu. Podgląd produkcyjny symuluje konfigurację bez trybu testowego. Ocena stosuje tę samą wagę co publiczne skanery i ma charakter orientacyjny. Ostatnia analiza i historia ocen pozostają widoczne po odświeżeniu.
Alerty o blokadach
Na karcie Ogólne i tryb testowy włącz Alerty email i podaj do 5 odbiorców. Przy wymuszonej CSP i wyłączonym trybie testowym każdy faktycznie zablokowany zasób, którego wcześniej nie widziano, powoduje wysłanie wiadomości z dyrektywą, źródłem i stroną. Nowe pozycje są grupowane, najwyżej jedna wiadomość na godzinę. Wyślij wiadomość testową sprawdza konfigurację; jeśli nic nie dotrze, sprawdź Zaawansowane > E-mail.
Historia, eksport i import
Każda zmiana zachowuje poprzednie ustawienia z datą, pracownikiem i różnicami względem obecnego stanu. Przechowywanych jest 15 ostatnich wersji; Przywróć wraca do jednej z nich, a zastąpiony stan trafia do historii.
Pobierz ustawienia tworzy plik JSON bez tajnych tokenów, do zaimportowania w innym sklepie, na przykład ze środowiska testowego na produkcję. Import zawsze włącza tryb testowy. Testowe adresy IP są importowane razem z ustawieniami: sprawdź je.
Cache, CDN i nagłówki serwera
- CDN lub cache stron może serwować stare nagłówki: czyść go po każdej zmianie.
- Jeśli hosting lub Cloudflare już dodaje nagłówki, skaner zgłasza duplikaty. Usuń je po stronie serwera lub wyłącz nagłówek w module.
- Aby nagłówkami zajmował się serwer, skopiuj blok Apache lub Nginx z pulpitu, a następnie wyłącz moduł. Raportowanie naruszeń i nonce, które zależą od modułu, nie są uwzględnione.
W razie problemów
- Strona przestała działać: przywróć poprzednią wersję z historii lub przełącz CSP z powrotem na Report-Only na czas poprawki.
- Wyłączenie wszystkiego: wyłącz Wysyłaj nagłówki bezpieczeństwa na karcie Ogólne albo cały moduł.
- HSTS: przeglądarka, która otrzymała HSTS, odrzuca http do końca ustawionego czasu, nawet po wyłączeniu modułu. Dlatego urządzenia testowe otrzymują tylko 5 minut.