LW IT Solutions logo LW IT Solutions logo LW IT Solutions
« Przegląd bloga /IT & Networks/Tutorials / Nagłówki bezpieczeństwa HTTP prosto wyjaśnione: które chronią,...
Ten artykuł w innych językach:

Nagłówki bezpieczeństwa HTTP prosto wyjaśnione: które chronią, a które tylko są

Nagłówki bezpieczeństwa HTTP prosto wyjaśnione: które chronią, a które tylko są

Management Summary

Nagłówki bezpieczeństwa to instrukcje przekazywane przez witrynę przeglądarce. Mogą ograniczać uruchamiany kod, wspierać szyfrowane połączenia lub zapobiegać niepożądanemu osadzaniu strony. Ochrona zależy od treści reguł, a nie od samej obecności nagłówka. Część ustawień jedynie zgłasza problemy, natomiast zbyt surowe zasady mogą wyłączyć potrzebne funkcje. Odpowiednio dobrane nagłówki uzupełniają bezpieczeństwo witryny, lecz nie zastępują usuwania błędów aplikacji.

Spis treści
  1. CSP: wyjątek nie unieważnia całej polityki
  2. Nonce i skróty we właściwej dyrektywie
  3. HSTS: czas, HTTPS i zakres domen
  4. Ramki: pierwszeństwo ma tylko egzekwowana polityka
  5. Referrer: origin to więcej niż domena
  6. Odczyt nagłówków nie zastępuje testu przeglądarki
  7. Pytania i odpowiedzi
  8. Źródła

Nagłówki bezpieczeństwa HTTP przekazują przeglądarce reguły dotyczące odpowiedzi. Ochrona zależy od wartości, współdziałania polityk i obsługi w przeglądarce. Sama lista obecnych nazw nagłówków nie wystarcza.

CSP ogranicza skrypty i inne zasoby. HSTS wymaga HTTPS dla znanych hostów. X-Frame-Options lub CSP frame-ancestors ogranicza osadzanie w ramkach. Referrer-Policy steruje informacją o pochodzeniu żądania. Permissions-Policy ogranicza obsługiwane funkcje przeglądarki; wyłączenie kamery lub lokalizacji może przerwać potrzebne działanie aplikacji.

Przykładowe wartości zapewniają różne rodzaje ochrony. Znaczenie mają także właściwe dyrektywy i dostarczenie przez HTTPS.
Przykładowe wartości zapewniają różne rodzaje ochrony. Znaczenie mają także właściwe dyrektywy i dostarczenie przez HTTPS.

CSP: wyjątek nie unieważnia całej polityki

Content-Security-Policy uzupełnia bezpieczne generowanie treści i przetwarzanie danych wejściowych jako dodatkowa ochrona przed cross-site scripting (XSS). Przy ataku XSS wstrzyknięty kod działa w przeglądarce jako część zaatakowanej strony. CSP nie zastępuje naprawiania błędów aplikacji. Znaczenie ma konkretna dyrektywa: script-src dotyczy skryptów, img-src obrazów, a default-src stanowi regułę zastępczą dla wielu dyrektyw zasobów.

Przy default-src 'self' 'unsafe-inline' skrypty osadzone są dozwolone, o ile nie obowiązuje bardziej szczegółowa dyrektywa skryptów. Zasoby zewnętrzne pozostają zasadniczo ograniczone do tego samego origin. Polityka jest osłabiona, ale nie całkowicie bezskuteczna. Wartość 'unsafe-inline' wyłącznie w style-src nie zezwala automatycznie na skrypty osadzone.

'unsafe-eval' dopuszcza określone wykonywanie ciągów znaków jako kodu, co różni się od zezwolenia na skrypty osadzone. Również default-src * nie dopuszcza automatycznie skryptów inline ani eval. Bardziej szczegółowa dyrektywa, na przykład script-src-elem, może ponownie zmienić ocenę.

Nonce i skróty we właściwej dyrektywie

Kryptograficznie losowa wartość nonce, generowana na nowo dla każdej odpowiedzi, może oznaczać dozwolone skrypty. Wartość musi wystąpić zarówno we właściwym wpisie źródła CSP, jak i w elemencie skryptu. Skrót to wartość obliczona z treści skryptu. Dopuszcza dokładnie pasującą treść; nawet zmiana białych znaków może wymagać nowego skrótu.

W liście źródeł sterującej danym skryptem nonce lub skrót wyłącza ogólne zezwolenie na kod inline w obsługujących przeglądarkach. Nonce w innej dyrektywie nie wystarcza. Stała, ponownie używana wartość nonce jest nieodpowiednia. Przy buforowanym HTML możliwe są na przykład skróty albo spójne generowanie nowego nagłówka i HTML.

Nonce nie obejmuje atrybutów zdarzeń takich jak onclick. Skróty wymagają dla takich atrybutów dodatkowo 'unsafe-hashes'; obsługę zdarzeń w skryptach zwykle łatwiej zabezpieczyć. Content-Security-Policy-Report-Only pomaga w testach i zgłasza naruszenia, ale nie blokuje według tej polityki.

HSTS: czas, HTTPS i zakres domen

max-age określa czas przechowywania reguły w sekundach. Poprawna odpowiedź HSTS przez HTTPS bez błędów odnawia termin. W okresie obowiązywania przeglądarka zamienia żądania HTTP objętego hosta na HTTPS. Nagłówki HSTS otrzymane nieszyfrowanym HTTP są ignorowane.

max-age=300 chroni przez pięć minut i może być przydatnym etapem kontrolowanego wdrożenia. Dla stałego HTTPS typowe są dłuższe okresy. includeSubDomains wymaga sprawnego HTTPS we wszystkich objętych subdomenach, również wewnętrznych.

Samo słowo preload nie dodaje domeny do list przeglądarek. Potrzebny jest osobny proces przyjęcia, spełnienie wymagań listy i dystrybucja do przeglądarek. Oficjalna strona preload obecnie zaleca HSTS, ale nie zaleca już ogólnie wcześniejszego umieszczania domen na liście. Usunięcie słowa kluczowego nie cofa natychmiast istniejącego wpisu.

Cztery jednakowe pionowe płyty: dwie pełne, dwie tylko jako zarys

Ramki: pierwszeństwo ma tylko egzekwowana polityka

X-Frame-Options: DENY zabrania ramek, a SAMEORIGIN ogranicza osadzanie do tego samego origin. W obsługujących przeglądarkach frame-ancestors z egzekwowanej CSP ma pierwszeństwo przed X-Frame-Options. Nagłówek Report-Only nie unieważnia X-Frame-Options.

frame-ancestors * szeroko dopuszcza zwykłe origin HTTP(S); sąsiednie DENY nie naprawia tej konfiguracji. Wiele egzekwowanych CSP działa równocześnie. Zakazowi osadzania odpowiada spójna para frame-ancestors 'none' oraz X-Frame-Options: DENY jako rozwiązanie zgodnościowe.

Referrer: origin to więcej niż domena

strict-origin-when-cross-origin zasadniczo przekazuje adres ze ścieżką i parametrami zapytania w obrębie tego samego origin. Przy zmianie origin zwykle pozostają tylko schemat, host i odpowiedni port; przejście z HTTPS do niezabezpieczonego HTTP usuwa referrer. Różne subdomeny lub porty już oznaczają różne origin.

unsafe-url może przekazywać ścieżki i parametry zapytania do innych origin, także przez HTTP. Fragmenty URL po # i dane logowania nie są przekazywane jako referrer. no-referrer usuwa referrer. Reguły odnośnika, ustawienia przeglądarki lub rozszerzenia mogą wpływać na rzeczywisty wynik. Dane wrażliwe najlepiej pozostawić poza adresami URL.

Odczyt nagłówków nie zastępuje testu przeglądarki

Sprawdzarka nagłówków bezpieczeństwa HTTP pobiera publiczny adres z ograniczoną liczbą przekierowań HTTP i ocenia końcową odpowiedź uproszczonymi regułami. To nie pełny model przeglądarki: powtarzane nagłówki, nonce, bardziej szczegółowe dyrektywy CSP i kombinacje Report-Only wymagają dodatkowego sprawdzenia.

Znaczenie mają rzeczywiste odpowiedzi ważnych stron, stron błędów i stanów logowania oraz obserwowane działanie w przeglądarce. Przekierowania powodują wiele żądań. Nawigacja JavaScript, reguły meta i potrzebne funkcje aplikacji nie są w pełni sprawdzane przez sam odczyt nagłówków.

Pytania i odpowiedzi

Co obowiązuje przy wielu nagłówkach CSP?

Wszystkie egzekwowane polityki działają równocześnie; łagodniejsza druga polityka nie osłabia surowszej. Polityka Report-Only dodaje wyłącznie obserwację. Gdy ta sama dyrektywa powtarza się w jednej polityce, liczy się pierwsze wystąpienie. Przy wielu polach nagłówka HSTS dokument RFC 6797 również wymaga przetwarzania tylko pierwszego.

Czy frame-ancestors działa w elemencie meta?

Nie. Ta dyrektywa musi pochodzić z nagłówka odpowiedzi CSP. X-Frame-Options również nie działa jako reguła meta. CSP w elemencie meta nie obsługuje także sandbox ani report-uri, a działanie zaczyna się dopiero po przetworzeniu elementu.

Lukas Wójcik

Lukas Wójcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Kontakt

Masz pytanie lub pomysł na projekt internetowy? Napisz krótko, o co chodzi. Formularz korzysta z reCAPTCHA do ochrony przed spamem.

Napisanie komentarza

Doświadczenia z innym sprzętem lub inną wersją oprogramowania oraz pytania o konfigurację są tu mile widziane.

Adres e-mail nie jest publikowany. Pola obowiązkowe oznaczono gwiazdką.