Security Headers – Simple Protection for Websites

Security Headers – Simple Protection for Websites

Co to są nagłówki bezpieczeństwa?

Nagłówki bezpieczeństwa to niewielkie fragmenty danych umieszczane w odpowiedziach HTTP od serwera internetowego. Ich celem jest zabezpieczenie witryny i użytkowników przed różnymi atakami i złośliwym wykorzystaniem przez przestępców. Poprzez odpowiednie skonfigurowanie tych nagłówków, właściciel strony internetowej może znacznie zwiększyć jej bezpieczeństwo. Jednak co dokładnie robią te nagłówki i jak działają?

Nagłówki bezpieczeństwa umożliwiają administratorom witryn aktywację lub dezaktywację określonych funkcji związanych z bezpieczeństwem. Niektóre z nich służą do zarządzania politykami dotyczącymi zawartości, podczas gdy inne mają na celu zmniejszenie ryzyka ataków związanych z przekroczeniem stref (cross-site) lub wymuszonym pobieraniem plików (file download hijacking). Kolejne pozwalają kontrolować środowisko przeglądarki, w którym wyświetlana jest witryna.

Jakie są zatem najważniejsze nagłówki bezpieczeństwa i co robią? Przyjrzyjmy się kilku kluczowym przykładom.

Content Security Policy (CSP)

Content Security Policy (Polityka Bezpieczeństwa Zawartości) to jeden z najważniejszych nagłówków bezpieczeństwa. Pozwala on określić zbiór źródeł dozwolonych do załadowania na stronie internetowej. Ustawienia te obejmują skrypty, style CSS, obiekty multimedialne, czcionki, obrazy i inne zasoby.

Oto przykładowy nagłówek Content Security Policy:

Content-Security-Policy: default-src 'self'; script-src 'self' https://example.com; style-src 'self' https://cdn.example.com;

W powyższym przykładzie strona może ładować zawartość tylko z własnej domeny ('self'). Skrypty są dozwolone z domeny własnej i https://example.com, a arkusze stylów z domeny własnej i https://cdn.example.com. Wszystko poza tymi źródłami jest blokowane.

Content Security Policy chroni przed atakami cross-site scripting (XSS), jedną z najczęstszych luk w aplikacjach internetowych. Zapobiega ona wstrzykiwaniu i wykonywaniu złośliwego kodu JavaScript na stronie. Chroni również przed innymi atakami, takimi jak clickjacking i transfer danych poufnych do zewnętrznych źródeł.

X-Frame-Options

Nagłówek X-Frame-Options służy do ochrony przed atakami clickjacking, w których zła strona próbuje zatrzymać Twoją stronę w obcej ramce lub iframe’ie w celu wyłudzenia od użytkowników kliknięć lub pobrania poufnych informacji.

Przykład użycia:

X-Frame-Options: SAMEORIGIN

Ten nagłówek mówi przeglądarce, aby wyświetlała stronę tylko w ramce znajdującej się w tej samej domenie. Możliwe są też inne wartości, takie jak DENY (całkowicie blokuje wyświetlanie strony w ramkach) oraz ALLOW-FROM (pozwala na wyświetlanie tylko z określonych adresów URL).

Nagłówek X-Frame-Options pomaga chronić przed atakami clickjacking oraz przed wstrzykiwaniem kodu za pomocą iframe’ów. Jest to proste, ale skuteczne zabezpieczenie.

Strict-Transport-Security (HSTS)

Nagłówek Strict-Transport-Security wymusza połączenia przez HTTPS na określony czas. Instruuje on przeglądarkę, aby od tej pory nawiązywała tylko bezpieczne połączenia z daną witryną, odrzucając żądania HTTP.

Przykładowa implementacja:

Strict-Transport-Security: max-age=31536000; includeSubDomains

W tym przypadku przeglądarka będzie wymagać protokołu HTTPS dla tej domeny przez co najmniej rok (wyrażone w sekundach). Domena i wszystkie jej subdomeny są objęte wymaganiem (includeSubDomains).

HSTS skutecznie uniemożliwia ataki podsłuchiwania i przechwytywania poufnych danych przesyłanych przez HTTP. Pomaga również w zaporze przed atakami man-in-the-middle i wymuszonym przekierowywaniem na serwery atakujących.

X-XSS-Protection

Nagłówek X-XSS-Protection to dodatkowa warstwa zabezpieczeń przed atakami XSS (cross-site scripting). Instruuje on przeglądarkę, aby zastosowała wbudowany filtr XSS i nie pokazywała żadnych zainfekowanych stron.

Przykładowe użycie:

X-XSS-Protection: 1; mode=block

Wartość 1 oznacza włączenie filtra XSS, a mode=block powoduje zablokowanie załadowania całej strony w przypadku wykrycia ataku XSS. Możliwe jest też ustawienie mode=sanitize, które spowoduje, że przeglądarka usunie potencjalnie szkodliwą zawartość.

Mimo że to zabezpieczenie jest domyślnie włączone w nowszych przeglądarkach, explicite ustawienie X-XSS-Protection zapewnia zgodność między różnymi przeglądarkaniami.

X-Content-Type-Options

Nagłówek X-Content-Type-Options powstrzymuje przeglądarkę przed próbami “odgadywania” typu MIME zasobów zwracanych przez serwer. Pomaga to zapobiegać niektórym atakom opartym na poleganiu na niewłaściwych typach plików.

Użycie jest niezwykle proste:

X-Content-Type-Options: nosniff

Wartość nosniff mówi przeglądarce, aby nie próbowała “węszyć” i ustalać typu zawartości, zmuszając ją do ścisłego przestrzegania rzeczywistego typu MIME określonego w odpowiedzi HTTP.

To zabezpieczenie pomaga przeciwdziałać pewnym atakom ukierunkowanym na wymuszone pobranie plików (forced file download) i nieoczekiwane wykonanie skryptów w przeglądarce.

Referrer-Policy

Nagłówek Referrer-Policy umożliwia kontrolę nad ilością informacji referrer (czyli adresu URL źródłowej strony) przesyłanych wraz z żądaniami do innych serwisów.

Przykładowa implementacja:

Referrer-Policy: no-referrer-when-downgrade

W tym przypadku pełny referer będzie wysyłany do miejsc docelowych, które używają protokołu HTTPS. Jednak w przypadku miejsc używających niezabezpieczonego HTTP referer nie będzie przesyłany, zapobiegając wyciekowi poufnych danych.

Nagłówek Referrer-Policy oferuje wiele opcji sterujących ilością ujawnianych informacji, od pełnego adresu URL przez samą domenę główną aż po całkowite ukrycie referencji.

To prosty sposób na zmniejszenie ryzyka wycieku danych oraz zapewnienie zgodności z przepisami i politykami prywatności.

Pozostałe nagłówki bezpieczeństwa

Omówiliśmy już kilka kluczowych nagłówków bezpieczeństwa, ale istnieje ich znacznie więcej. Oto krótkie podsumowanie kilku innych przydatnych nagłówków:

  • Expect-CT – Pozwala włączyć i skonfigurować mechanizmy Certificate Transparency w celu wykrywania nieprawidłowych certyfikatów.
  • Feature-Policy – Kontroluje dostęp do określonych możliwości przeglądarki, takich jak kamera, mikrofon, akcelerometr itp.
  • X-Permitted-Cross-Domain-Policies – Ogranicza możliwość przesyłania zasad cross-domain określonych typów zasobów.
  • Clear-Site-Data – Instruuje przeglądarkę, aby wyczysciła określone rodzaje pamięci podręcznej.

To tylko kilka przykładów. Istnieje wiele innych nagłówków bezpieczeństwa, które można wykorzystać, aby lepiej zabezpieczyć witrynę przed różnymi rodzajami ataków.

Jak skonfigurować nagłówki bezpieczeństwa?

Po zrozumieniu roli i zastosowania różnych nagłówków bezpieczeństwa czas na ich wdrożenie! Na jakich zatem etapach należy skonfigurować te nagłówki?

Najważniejsze jest ustawienie nagłówków bezpieczeństwa na serwerze internetowym, który obsługuje witrynę. W przypadku Apache można to zrobić przez dodanie odpowiednich wpisów do pliku konfiguracyjnego .htaccess lub głównego pliku konfiguracyjnego serwera.

Na przykład, aby ustawić nagłówek Content Security Policy, można dodać następujący wpis do .htaccess:

Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://example.com"

W przypadku serwerów Nginx nagłówki konfiguruje się w bloku server lub location w głównym pliku konfiguracyjnym:

“`nginx
server {
listen 80;
server_name example.com;

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-XSS-Protection "1; mode=block";

# Pozostałe dyrektywy...

}
“`

Wiele platform hosting webowych i systemów zarządzania treścią (CMS) umożliwia także wygodną konfigurację nagłówków bezpieczeństwa za pośrednictwem interfejsu administratora lub panelu sterowania.

Oprócz serwera można również rozważyć ustawienie niektórych nagłówków w kodzie witryny, na przykład za pomocą nagłówków odpowiedzi w JavaScript lub specjalnych znaczników meta w HTML. Należy jednak pamiętać, że rozwiązania po stronie klienta są mniej niezawodne i powinny być traktowane jedynie jako uzupełnienie, a nie zastępstwo konfiguracji serwerowej.

Uwagi, dobre praktyki i zasoby

Wprowadzając nagłówki bezpieczeństwa, ważne jest przestrzeganie kilku dobrych praktyk:

  1. Testuj regularnie: Zmiany w nagłówkach mogą powodować niepożądane efekty uboczne, więc zawsze testuj je na środowiskach lokalnych i tymczasowych przed wprowadzeniem na produkcję.

  2. Bądź realistyczny: Nie wszystkie nagłówki będą miały sens dla każdej witryny. Przeprowadź analizę zagrożeń i wdrażaj tylko te mechanizmy bezpieczeństwa, które są odpowiednie dla Twojego przypadku użycia.

  3. Bądź spójny: Upewnij się, że nagłówki są spójnie skonfigurowane na wszystkich serwerach, domenach i poddomenie obsługujących Twoją witrynę.

  4. Śledź aktualizacje: Standardy i zalecane praktyki w zakresie bezpieczeństwa ciągle się zmieniają. Regularnie sprawdzaj aktualizacje i dostosowuj swoje nagłówki odpowiednio.

  5. Korzystaj z narzędzi: Dostępne są liczne narzędzia, które mogą ułatwić testowanie, wdrażanie i monitorowanie nagłówków bezpieczeństwa, takie jak securityheaders.com, webhint.io czy wtyczka Security Headers dla przeglądarki Firefox.

Aby dowiedzieć się więcej na temat nagłówków bezpieczeństwa, możesz zajrzeć do następujących źródeł:

Prawidłowa konfiguracja nagłówków bezpieczeństwa jest prostym, ale niezwykle skutecznym sposobem na zwiększenie bezpieczeństwa witryn internetowych. Choć nie rozwiązuje ona wszystkich problemów, stanowi ważny element ogólnej strategii bezpieczeństwa aplikacji internetowych i powinna być priorytetem dla każdego administratora systemu.

Nasze inne poradniki

Chcemy być Twoim partnerem w tworzeniu strony internetowej, a Ty chcesz mieć profesjonalnie zaprojektowaną witrynę?

Zrobimy to dla Ciebie!