Jak działa ta kontrola
Ta kontrola działa tylko wtedy, gdy Twoja strona już wysyła nagłówek Referrer-Policy; jeśli brakuje go całkowicie, zgłasza to skaner nagłówków. Scanaris odczytuje wartość i jeśli zawiera unsafe-url lub no-referrer-when-downgrade, otwiera ustalenie o niskiej wadze z dokładną wartością. Każda inna wartość (strict-origin-when-cross-origin, no-referrer, same-origin, origin, strict-origin) jest uznawana za dobrą. Czyli nie mierzy, czy masz nagłówek, tylko czy ten, który masz, nie wycieka pełnego adresu.
Czym jest referer i co wycieka
Za każdym razem, gdy użytkownik klika link do innej strony albo Twoja strona ładuje obraz lub skrypt z innej domeny, przeglądarka wysyła do celu nagłówek Referer z adresem strony, z której przychodzi. Polityka referera decyduje, ile z tego adresu jest wysyłane. Przy unsafe-url pełny adres, ze ścieżką i parametrami, nawet jeśli cel jest HTTP. Przy no-referrer-when-downgrade pełny adres do każdego celu HTTPS; to było domyślne zachowanie przeglądarek do 2020 roku i dlatego nadal tkwi w wielu starych konfiguracjach. Wyciekają rzeczy takie jak /dashboard/faktury/8841, /reset-password?token=..., /szukaj?q=zwolnienie albo identyfikator udostępnionego dokumentu: wszystko, co jest w adresie użytkownika, trafia do sieci reklamowych, usług analitycznych i każdej zewnętrznej strony, do której linkujesz.
Jak to naprawić
Zalecana wartość dla niemal każdej strony:
Referrer-Policy: strict-origin-when-cross-origin
Wysyła pełny adres wewnątrz Twojej własnej domeny (Twoja analityka dalej działa), tylko źródło (https://twojadomena.pl) do innych domen, i nic, jeśli cel jest HTTP. To domyślna wartość nowoczesnych przeglądarek, więc ustawiając ją jawnie, tylko utrwalasz to, co już robią. Jeśli nikt nie musi wiedzieć, skąd przychodzi odwiedzający, no-referrer jest jeszcze bardziej restrykcyjne.
- Nuxt: w
routeRuleswnuxt.config, w regule'/**'. - Next.js: w funkcji
headers()wnext.config.js. - Vercel: w
vercel.json. Netlify: w_headers. - nginx:
add_header Referrer-Policy "strict-origin-when-cross-origin" always;. Apache:Header always set Referrer-Policy "strict-origin-when-cross-origin". - Express:
helmet.referrerPolicy({ policy: 'strict-origin-when-cross-origin' }).
Jeśli jakiś konkretny link potrzebuje innego zachowania (np. program partnerski wymagający pełnego referera), ustaw to na tym linku atrybutem referrerpolicy zamiast luzować politykę całej strony.
Sprawdź, czy naprawione
curl -sI https://twojadomena.pl | grep -i referrer-policy
Powinno pokazać strict-origin-when-cross-origin lub no-referrer. Sprawdź też, czy w HTML-u nie ma znacznika <meta name="referrer"> z inną wartością: meta ma pierwszeństwo przed nagłówkiem na tej stronie.
Często zadawane pytania
Czy stracę dane w Google Analytics albo moim narzędziu statystyk?
Nie. Analityka Twojej własnej strony karmi się skryptem, który dołączasz, a nie refererem. Zmienia się to, co widzą strony, do których linkujesz: zamiast dokładnej strony zobaczą Twoją domenę. Dla Twoich własnych stron wewnętrznych pełny referer zostaje.
Moja strona nie ma adresów z wrażliwymi danymi.
Dzisiaj. Link do resetu hasła, identyfikator zamówienia albo parametr wyszukiwania pojawiają się, gdy tylko strona rośnie. Ustawienie właściwej polityki to jedna linia i nie ma skutków ubocznych.
Dlaczego no-referrer-when-downgrade było wartością domyślną?
Bo w pierwszych latach sieci pełny referer uznawano za przydatny, a HTTPS był w mniejszości. Chrome, Firefox i Safari zmieniły wartość domyślną na strict-origin-when-cross-origin między 2020 a 2021 rokiem właśnie z powodu wycieków, które opisuje ten przewodnik. Wszystkie powiązane nagłówki wyjaśnia nagłówki HTTP dla ludzi.