Nagłówki bezpieczeństwa HTTP: co ustawić, kiedy masz już SSL

Nagłówki bezpieczeństwa HTTP: co ustawić, kiedy masz już SSL (grafika wygenerowana przez AI)

Nagłówki bezpieczeństwa HTTP: co ustawić, kiedy masz już SSL

Certyfikat SSL szyfruje ruch między przeglądarką a serwerem i na tym kończy się jego rola. Nie powie przeglądarce, że skryptów z obcych domen wykonywać nie wolno, że Twoja strona nie powinna dać się wczytać w cudzej ramce ani że następne wejście ma od razu pójść po HTTPS. Tym zajmują się nagłówki odpowiedzi HTTP, a ustawienie ich zajmuje kilka linijek w pliku konfiguracyjnym.

W pakietach hostingowych RapidDC certyfikat Let’s Encrypt jest w cenie (source: rapiddc.pl/hosting-www), więc pierwszy krok masz zwykle za sobą. Drugiego nikt nie zrobi za Ciebie.

Czego SSL nie załatwia

Kłódka w pasku adresu mówi o jednym: połączenie jest zaszyfrowane. Jeśli ktoś wstrzyknie na Twoją stronę skrypt przez podatną wtyczkę, ten skrypt wykona się po HTTPS równie dobrze jak po HTTP. Jeśli konkurencja opakuje Twój sklep w iframe na swojej domenie, certyfikat tego nie zauważy.

Nagłówki działają inaczej. Serwer dokłada je do każdej odpowiedzi, a przeglądarka traktuje je jako zasady, których ma się trzymać. To jedyne miejsce, gdzie możesz jej cokolwiek narzucić.

HSTS: wymuś HTTPS na poziomie przeglądarki

Strict-Transport-Security mówi przeglądarce: przez najbliższe X sekund łącz się z tą domeną wyłącznie po HTTPS, bez pytania. Przekierowanie 301 z HTTP na HTTPS zostawia jedno pierwsze żądanie po nieszyfrowanym kanale. HSTS zamyka tę szparę od drugiej wizyty.

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Jedna pułapka: includeSubDomains obejmuje wszystkie subdomeny, także te, na których nie masz certyfikatu. Jeśli masz starą subdomenę z panelem bez SSL, przestanie się otwierać. Zacznij od krótkiego max-age, na przykład 300 sekund, sprawdź, czy nic nie padło, i dopiero potem podnieś do roku.

Content-Security-Policy: najtrudniejszy, ale najskuteczniejszy

CSP to lista domen, z których przeglądarka ma prawo wczytywać skrypty, style, obrazki i czcionki. Wszystko spoza listy jest blokowane. To realna ochrona przed XSS i przed skryptami doklejonymi przez zainfekowaną wtyczkę.

Jest też nagłówkiem, który najłatwiej położy stronę. Typowy WordPress z kilkoma wtyczkami wczytuje zasoby z Google Fonts, z CDN-a, z narzędzia analitycznego i z paru miejsc, o których nie pamiętasz. Restrykcyjne CSP wyłączy połowę z nich.

Dlatego zacznij od trybu raportowania:

Header always set Content-Security-Policy-Report-Only "default-src 'self'; img-src 'self' data:; script-src 'self'"

W tej wersji przeglądarka niczego nie blokuje, tylko zgłasza naruszenia w konsoli. Pozbieraj je z kilku dni, dopisz domeny, których naprawdę używasz, i dopiero wtedy zmień nazwę nagłówka na Content-Security-Policy.

Cztery nagłówki, które ustawisz raz i zapomnisz

Te nie wymagają testów. Wartości poniżej są bezpieczne dla praktycznie każdej strony firmowej i sklepu:

Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
  • nosniff każe przeglądarce wierzyć deklarowanemu typowi pliku, zamiast zgadywać po zawartości. Zgadywanie bywa wykorzystywane do wykonania obrazka jako skryptu.
  • SAMEORIGIN pozwala wczytać Twoją stronę w ramce tylko na Twojej własnej domenie. Blokuje clickjacking.
  • Referrer-Policy ogranicza to, co Twoja strona zdradza o sobie przy wyjściu na obcy adres. Przy adresach z parametrami ma to znaczenie także dla RODO.
  • Permissions-Policy wyłącza API, których strona nie używa. Kamera i mikrofon w sklepie są zbędne, więc niech będą zablokowane.

Gdzie to wpisać

Na hostingu współdzielonym nagłówki wstawia się do pliku .htaccess w katalogu strony. Jeśli nie pracowałeś z nim wcześniej, mamy osobny poradnik: czym jest plik .htaccess i jakie reguły warto w nim trzymać. Pliki edytujesz w menedżerze plików DirectAdmin, który dostajesz w każdym pakiecie hostingu RapidDC.

Dyrektywy Header wymagają włączonego modułu mod_headers. Nie zgaduj, czy go masz: wpisz jeden nagłówek, odśwież stronę i sprawdź, czy się pojawił. Jeśli zamiast strony zobaczysz błąd 500, modułu nie ma i zostaje poziom aplikacji, czyli funkcja header() w PHP albo wtyczka.

Na serwerze VPS masz pełną kontrolę. W Nginksie to dyrektywa add_header w bloku server, w Apache’u ta sama składnia co wyżej, tylko w konfiguracji hosta wirtualnego, nie w .htaccess.

Jak sprawdzić, czy działa

Trzy sposoby, od najszybszego:

  1. curl -I https://twojadomena.pl wypisze wszystkie nagłówki odpowiedzi. Jedna komenda, pełna lista.
  2. W przeglądarce: DevTools, zakładka Network, pierwszy wpis na liście, sekcja Response Headers.
  3. Zewnętrzny skaner, na przykład securityheaders.com, który dodatkowo oceni konfigurację i wskaże braki.

Po wdrożeniu CSP przejdź jeszcze przez stronę z otwartą konsolą i kliknij to, co klika użytkownik: formularz, koszyk, galerię. Zablokowany skrypt zgłosi się w konsoli, nie w raporcie z zewnętrznego narzędzia.

Podsumowanie

Nagłówki to najtańsza warstwa zabezpieczeń, jaką masz: żadnej wtyczki, żadnego abonamentu, kilka linijek tekstu. Zrób to w tej kolejności: cztery nagłówki z gotowymi wartościami od razu, HSTS z krótkim max-age na próbę, CSP w trybie Report-Only na kilka dni.

Jeśli nie masz jeszcze certyfikatu, od niego zacznij, bo HSTS bez SSL tylko zablokuje stronę. Dlaczego certyfikat jest dziś obowiązkowy, opisaliśmy w tekście o tym, dlaczego Twoja strona musi mieć certyfikat SSL. Potem wystarczy pakiet hostingu z DirectAdminem i dostęp do .htaccess.

FAQ – najczęściej zadawane pytania o nagłówki bezpieczeństwa HTTP

Czy nagłówki bezpieczeństwa wpływają na SEO?

Bezpośrednio nie, Google nie ustala pozycji na podstawie samych nagłówków. Pośrednio tak: zhakowana strona wypada z wyników, a HSTS eliminuje jedno przekierowanie przy wejściu, co nieznacznie skraca czas pierwszej odpowiedzi.

Czy mogę ustawić CSP na WordPressie bez ryzyka, że strona przestanie działać?

Tak, jeśli zaczniesz od Content-Security-Policy-Report-Only. W tym trybie przeglądarka wypisuje naruszenia w konsoli, ale niczego nie blokuje. Po kilku dniach zbierania danych wiesz, które domeny dopisać, i dopiero wtedy włączasz tryb blokujący.

Potrzebuję VPS-a, żeby ustawić nagłówki?

Nie. Na hostingu współdzielonym wystarczy plik .htaccess i włączony moduł mod_headers. VPS daje więcej, bo konfigurujesz serwer na poziomie hosta wirtualnego i możesz ustawić nagłówki globalnie dla wszystkich stron na maszynie.

Co zrobić, gdy po dodaniu nagłówków strona zwraca błąd 500?

Usuń dodane linijki i wracaj po jednej. Błąd 500 po dyrektywie Header prawie zawsze oznacza brak modułu mod_headers albo literówkę w składni. Dokładny powód znajdziesz w logu błędów serwera, dostępnym w panelu.


Artykuł powstał z wykorzystaniem narzędzi sztucznej inteligencji (AI) pod nadzorem zespołu RapidDC. Grafika ilustracyjna została wygenerowana przez AI.