Skip to content

Security Response Headers czyli Nagłówki bezpieczeństwa

Nagłówki odpowiedzi są używane po stronie klienta i serwera. Stanowią dyrektywy, które instruują przeglądarkę, o tym jak powinna się zachowywać w określonych sytuacjach, np. jak chronić się przed zagrożeniami, jak zabezpieczać połączenia, kontrolować dostęp do wybranych funkcji i zarządzać przepływem informacji między witrynami.

Mogą one podnosić bezpieczeństwo witryny dawać wyższe zabezpieczenia przed clickjackingiem, przejęciem ciasteczek, atakami na typy MIME i wieloma innymi scenariuszami.

Wybrane nagłówki bezpieczeństwa oraz ich stosowanie

Content-Security-Policy

Nagłówek Content-Security-Policy (CSP) to zabezpieczenie stosowane na serwerach www, które umożliwia administratorom określanie, które rodzaje zasobów (takie jak skrypty JavaScript, obrazy, czy arkusze stylów CSS) mogą być ładowane przez przeglądarkę na danej stronie internetowej. Dzięki temu, jeśli atakujący spróbowałby wstrzyknąć szkodliwy skrypt lub obraz, CSP uniemożliwi ich wykonanie, zabezpieczając tym samym użytkowników przed potencjalnymi atakami XSS (Cross-Site Scripting) czy innych zagrożeń związanych z ładowaniem niezaufanych zasobów. To narzędzie wprowadza warstwę dodatkowego bezpieczeństwa, chroniąc witrynę przed atakami, które wykorzystują manipulację treścią ładowaną przez przeglądarkę.

Przykładowe wartości: Źródła (Sources):

  • self: Odnosi się do bieżącej domeny (strony), co oznacza, że zasoby mogą być ładowane tylko z tej samej domeny.
  • unsafe-inline: Pozwala na używanie kodu JavaScript i stylów CSS bezpośrednio w treści strony, co jednak jest uznawane za mniej bezpieczne.
  • unsafe-eval: Pozwala na używanie funkcji eval() w JavaScript, co również jest uznawane za mniej bezpieczne. none: Blokuje wszystkie źródła, co uniemożliwia ładowanie treści zewnętrznej. Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';

Typy zasobów (Media Types): media-src: Ogranicza źródła, do których można załadować zasoby multimedialne (np. obrazy, audio, video). Content-Security-Policy: media-src 'self' https://media.example.com;

Raportowanie (Reporting): report-uri lub report-to: Określa adres URL, na który przeglądarka powinna wysyłać raporty o próbach ładowania niedozwolonych zasobów. Content-Security-Policy: default-src 'self'; report-uri /raporty-bledow;

Polityki niestandardowe: Wartości specyficzne dla danego zastosowania, takie jak frame-ancestors kontrolujące osadzanie strony w ramkach. Content-Security-Policy: frame-ancestors 'none';

X-Content-Type-Options

Celem tego nagłówka jest zabezpieczenie przed atakami związanych z manipulacją typami zawartości. Działanie: Ustawiając ten nagłówek, mówimy przeglądarkom, aby nie próbowały zgadywać typu zawartości plików (na podstawie ich treści). To zabezpiecza przed potencjalnymi atakami, gdzie atakujący próbuje wprowadzić błędne typy zawartości w celu oszukania przeglądarki.

Wartości: nosniff:Oznacza, że przeglądarka nie powinna próbować zgadywać typu zawartości pliku (na podstawie jego treści). Uniemożliwia przeglądarce interpretowanie pliku w sposób, który może być niebezpieczny, szczególnie w kontekście ataków, które polegają na fałszowaniu typów zawartości

Brak tego nagłówka (lub wartość ustawiona inna niż nosniff) oznacza, że przeglądarka będzie próbować zgadywać typ zawartości pliku na podstawie jego treści. Wartość domyślna może być ustawiona przez przeglądarkę, a w niektórych przypadkach może to prowadzić do potencjalnych ryzyk, zwłaszcza jeśli strona jest narażona na ataki związane z manipulacją typami zawartości.

Strict-Transport-Security

Nagłówek Strict-Transport-Security (HSTS) to mechanizm bezpieczeństwa, który informuje przeglądarkę internetową o konieczności łączenia się z daną stroną tylko przez bezpieczne połączenie HTTPS, z pominięciem niezabezpieczonego protokołu HTTP. Poprzez ustawienie tego nagłówka, administrator serwera zobowiązuje przeglądarkę do automatycznego przekierowania ruchu na stronę przez szyfrowane połączenie HTTPS, nawet jeśli użytkownik wpisze adres z protokołem HTTP. Dzięki temu zminimalizowane zostaje ryzyko ataków typu man-in-the-middle, gdzie potencjalny atakujący może przechwycić lub modyfikować niezaszyfrowane dane przesyłane między przeglądarką a serwerem. HSTS zwiększa bezpieczeństwo komunikacji między użytkownikiem a stroną internetową poprzez eliminację możliwości przypadkowego korzystania z niezabezpieczonego połączenia.

Dla nagłówka Strict-Transport-Security istnieje jedna główna wartość i kilka opcjonalnych atrybutów:

Wartość:

max-age=<liczba sekund>: Określa, przez ile sekund przeglądarka powinna trzymać informację o tym, że strona powinna być ładowana tylko przez bezpieczne połączenie HTTPS. Na przykład, max-age=31536000 oznacza, że polityka HSTS będzie obowiązywała przez jeden rok.

Opcjonalne atrybuty:

includeSubDomains: Wskazuje, że polityka HSTS powinna obowiązywać również dla wszystkich subdomen danej witryny. Na przykład, max-age=31536000; includeSubDomains. preload: Wskazuje, że witryna chce zostać dodana do listy preload HSTS. Jest to bardziej zaawansowane ustawienie, które wymaga dodatkowych kroków, a witryna staje się wpisem w preloaded HSTS list, której przeglądarki używają, aby automatycznie włączać HSTS dla witryn na tej liście. Na przykład, max-age=31536000; includeSubDomains; preload. Wartości te służą do dostosowywania i precyzyjnej konfiguracji polityki Strict-Transport-Security w zależności od potrzeb danego projektu.

X-Frame-Options

Nagłówek X-Frame-Options na serwerze www pełni rolę ochrony przed atakami, gdzie strona jest osadzana w ramkach (frames) na innych stronach. Dzięki temu zabezpieczeniu, administrator informuje przeglądarki internetowe, że strona nie może być "umieszczana" w ramkach na innych witrynach. To zapobiega potencjalnym próbom oszustwa i chroni witrynę przed atakami, które mogą wynikać z manipulacji wyglądem strony na innych stronach internetowych.

Wartości:

DENY: Uniemożliwia osadzanie strony w ramkach. SAMEORIGIN: Pozwala na osadzanie strony tylko na stronach pochodzących z tego samego źródła (tej samej domeny).

Feature-Policy

Nagłówek Feature-Policy umożliwia kontrolę dostępu do różnych funkcji przeglądarki na konkretnej stronie internetowej. Kiedy jest ustawiony na serwerze www, pozwala administratorowi określać, które konkretne funkcje przeglądarki są dozwolone, a które nie.

Na przykład, poprzez ustawienie Feature-Policy, można zdecydować, czy strona ma mieć dostęp do funkcji takich jak geolokalizacja, korzystanie z aparatu czy mikrofonu. To narzędzie umożliwia ograniczanie dostępu do pewnych funkcji, co nie tylko zwiększa bezpieczeństwo, ale także pomaga chronić prywatność użytkowników. Poprzez precyzyjne zarządzanie tym, jakie funkcje są dostępne na stronie, administrator może minimalizować ryzyko potencjalnych nadużyć i zwiększać ogólne bezpieczeństwo witryny.

Przykładowa wartość: geolocation 'self'; camera 'none'; microphone 'none': Pozwala na korzystanie z geolokalizacji tylko na stronie, a aparatu i mikrofonu nie zezwala w ogóle.

Access-Control-Allow-Origin

Nagłówek Access-Control-Allow-Origin jest związany z zabezpieczeniami CORS (Cross-Origin Resource Sharing) i umożliwia kontrolę dostępu do zasobów na innych stronach. Kiedy jest skonfigurowany na serwerze www, decyduje, które konkretne domeny (strony internetowe) mają uprawnienie do pobierania zasobów z danej witryny.

Wartość: Określa, które domeny mają dostęp do zasobów, na przykład Access-Control-Allow-Origin: https://inna-domena.com.

Jak sprawdzić nagłówki i ich aktualny status

Najprostszą metodą będzie użycie narzędzia securityheaders.com. Wystarczy, że wpiszesz adres swojej witryny i zaczekasz kilka sekund na wyniki. Na ekranie pojawi się ocena twojej strony oraz informacje, jakie nagłówki działają, a jakie nie.

Dla osób bardziej ceniących sobie pracę w terminalu użyjemy curl: curl -I http://example.com/ Osoby bardziej dociekliwe odsyłam do dokumentacji curla https://curl.se/docs/

Wdrożenie nagłówków bezpieczeństwa

Większość dostawców usług hostingowych zezwala na edycję nagłówków w twojej stronie www przez plik .htaccess. Poniżej znajdziesz przykłady jak powyższe rodzaje nagłówków mogą być ukryte. Pamiętaj, aby dostosować je do swoich wymagań oraz wersji oprogramowania.

Apache
<IfModule mod_headers.c>
    Header always set X-Frame-Options "SAMEORIGIN"
    Header set X-Content-Type-Options "nosniff"
    Header set X-Permitted-Cross-Domain-Policies "none"
    Header unset X-Powered-By
    Header unset Server
    Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS 
    Header set Referrer-Policy "strict-origin-when-cross-origin"
    Header set Feature-Policy "microphone 'none'; camera 'none'"
    Header set Permissions-Policy "autoplay=(self), encrypted-media=(self), fullscreen=(self), geolocation=(self), midi=(self), payment=(self)"
    Header set Content-Security-Policy "default-src 'self'; object-src 'none'; script-src 'self' https: data: blob: 'unsafe-inline' 'unsafe-eval'; connect-src 'self' https:; style-src 'self' https: 'unsafe-inline'; font-src 'self' data: https:; img-src 'self' blob: data: https:; frame-src 'self' https: blob:;"
</IfModule>
Apache
<IfModule mod_headers.c>
    Header set X-Frame-Options SAMEORIGIN
    Header set X-Content-Type-Options "nosniff"
    Header set X-Permitted-Cross-Domain-Policies "none"
    Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    Header set Content-Security-Policy "upgrade-insecure-requests"
    Header set Referrer-Policy "no-referrer-when-downgrade"
    Header set Permissions-Policy "accelerometer=(), autoplay=(self), camera=(), cross-origin-isolated=(), display-capture=(), encrypted-media=(self), fullscreen=(self), geolocation=(self), gyroscope=(), keyboard-map=(), magnetometer=(), microphone=(), midi=(), payment=(), picture-in-picture=(self), publickey-credentials-get=(), screen-wake-lock=(), sync-xhr=(self), usb=(), xr-spatial-tracking=()"
    Header always unset X-Powered-By
    Header unset X-Powered-By
</IfModule>

Uwagi i niepożądane skutki

Stosowanie nagłówków bezpieczeństwa, takich jak Content-Security-Policy, X-Frame-Options, X-XSS-Protection, Referrer-Policy, Feature-Policy, Access-Control-Allow-Origin, Secure, HttpOnly i inne, zazwyczaj przyczynia się do podniesienia poziomu bezpieczeństwa witryny. Niemniej jednak nieprawidłowa konfiguracja lub nieświadome zastosowanie tych nagłówków może prowadzić do pewnych niepożądanych skutków, takich jak:

  • Problemy z funkcjonalnością: Zbyt restrykcyjna konfiguracja nagłówków może wpłynąć na funkcjonalność strony internetowej, szczególnie jeśli są one używane w sposób, który nie jest odpowiednio przemyślany. Na przykład, zbyt surowe ustawienia Content-Security-Policy mogą uniemożliwić załadowanie niektórych skryptów lub zasobów, co może prowadzić do błędów w działaniu strony.
  • Problemy ze zgodnością: Niektóre nagłówki mogą powodować problemy ze zgodnością na starszych przeglądarkach lub w przypadku niektórych konfiguracji. Należy sprawdzić, czy wszystkie używane nagłówki są obsługiwane przez przeglądarki, które mają być wspierane.
  • Problemy z rozwojem i testowaniem: Wprowadzanie silnych zabezpieczeń może utrudnić pracę deweloperom i testerom, zwłaszcza podczas implementacji nowych funkcji lub testowania różnych scenariuszy.

W związku z tym zawsze zaleca się staranne przetestowanie i monitorowanie witryny po zastosowaniu nagłówków bezpieczeństwa oraz zaznajomienie się z ich funkcjonalnością i wpływem na stronę przed ich wdrożeniem.

Dodatkowe zabezpieczenie ciasteczek

Jeśli jesteś nadal głodny wiedzy, sprawdź jak możesz zabezpieczyć ciasteczka, na swojej stronie. Mały poradnik znajdziesz na tej stronie: bezepiczeństwwo ciasteczek.