Treść mieszana

Czym jest treść mieszana, dlaczego aktywna treść mieszana jest blokowana, a pasywna tylko ostrzegana, oraz jak wykrywać i naprawiać niezabezpieczone zasoby podrzędne na dużą skalę — konsola przeglądarki, raportowanie CSP, upgrade-insecure-requests, block-all-mixed-content oraz jak CMS-y i technologie reklamowe ponownie ją wprowadzają.

Opublikowano po raz pierwszy: 3 lip 2026 · Ostatnia aktualizacja: 3 sie 2026 · Zaawansowane

Treść mieszana to strona HTTPS ładująca zasób podrzędny przez HTTP. Obecna taksonomia przeglądarek rozróżnia zasoby możliwe do uaktualnienia i blokowalne; starszy podział na aktywną/pasywną nadal odpowiada temu dla większości typów, z wyjątkami (obrazy z włączonym CORS, srcset/picture oraz żądania do adresów IP są blokowalne, a nie możliwe do uaktualnienia). Aktywna treść mieszana — skrypty, arkusze stylów, iframe'y, XMLHttpRequest/fetch — jest blokowana całkowicie, ponieważ zmodyfikowany skrypt może przepisać całą stronę, więc to ona faktycznie psuje witrynę po migracji HTTP→HTTPS; napraw ją najpierw. Pasywna treść mieszana — obrazy, audio, wideo — historycznie ładowała się z obniżoną kłódką, a obecnie jest coraz częściej automatycznie uaktualniana lub blokowana. Linki kotwiczące i inna nawigacja na najwyższym poziomie przez HTTP nie są treścią mieszaną, podobnie jak niezabezpieczone pobieranie (powiązana, ale odrębna granica). Znajdź ją w pobranym źródle, w stanie renderowania/czasu wykonania oraz w sesjach rzeczywistych użytkowników: przeszukaj witrynę HTTPS, obserwuj konsolę narzędzi programistycznych Chrome (dokładne sformułowanie zależy od przeglądarki/wersji) lub zbieraj naruszenia Content-Security-Policy-Report-Only; napraw ją, najpierw potwierdzając, że odpowiednik HTTPS faktycznie działa, a następnie kierując każdy zasób podrzędny na https:// (ścieżki względne lub protokołowo-względne tylko po zweryfikowaniu własności i zachowania podstawowego adresu URL). Nagłówek Content-Security-Policy: upgrade-insecure-requests przepisuje żądania http:// w zakresie — w tym do innych źródeł — na https:// przed ich wysłaniem i przed sprawdzeniami treści mieszanej/CSP; nie ma on mechanizmu awaryjnego HTTP, jeśli uaktualnienie się nie powiedzie, jest to siatka bezpieczeństwa, a nie substytut czyszczenia źródła, NIE uaktualnia nawigacji na najwyższym poziomie do źródeł zewnętrznych (więc nie zastępuje HSTS), a ustawienie samej dyrektywy w trybie tylko do raportowania jest bezczynne — monitoruj za pomocą osobnej polityki tylko do raportowania. Bazy danych CMS (wykonaj kopię zapasową i przetestuj zamiany na sucho — naiwne zastępowanie ciągów może uszkodzić serializowane dane), wtyczki/motywy, mechanizmy service worker i pamięci podręczne oraz tagi reklam/analityczne to zwykli recydywiści; audytuj na dużą skalę za pomocą crawlera i raportowania CSP, a nie strona po stronie.

TL;DR — Treść mieszana to strona HTTPS ładująca zasób podrzędny przez HTTP. Obecna taksonomia przeglądarek/W3C dzieli ją na uaktualnialną i blokowalną; starszy podział aktywna/pasywna (użyty poniżej jako rama zasięgu oddziaływania) nadal odpowiada temu podziałowi dla większości typów zasobów, z wyjątkami — obrazy z obsługą CORS, kandydaci srcset/picture oraz żądania do hostów IP są blokowalne, mimo że zwykły img src jest uaktualnialny. Aktywna (skrypty, arkusze stylów, iframe, XMLHttpRequest/fetch i wszystko, co przeglądarka wykonuje) jest blokowana — zmodyfikowany skrypt może przepisać stronę — więc to regresja pierwszego dnia, którą należy naprawić najpierw. Pasywna (obrazy, audio, wideo) historycznie ładowała się z obniżonym wskaźnikiem i obecnie jest coraz częściej automatycznie uaktualniana lub blokowana. Linki kotwicowe i inna nawigacja najwyższego poziomu przez HTTP nie są treścią mieszaną; nie są nimi również niezabezpieczone pobierania, które stanowią pokrewną, ale odrębną granicę. Wykrywaj ją na trzech poziomach — pobranym źródle, stanie renderowania/czasu wykonania i rzeczywistych sesjach użytkowników — poprzez przeszukiwanie witryny HTTPS, czytanie konsoli Chrome DevTools (dokładne sformułowanie zależy od przeglądarki/wersji) lub zbieranie naruszeń Content-Security-Policy-Report-Only; napraw ją, potwierdzając, że odpowiednik HTTPS faktycznie działa, a następnie kierując każdy zasób podrzędny na https:// (ścieżki względne/względne protokołu są w porządku, gdy zweryfikujesz własność i zachowanie podstawowego adresu URL, ale nie są uniwersalnym domyślnym rozwiązaniem). Content-Security-Policy: upgrade-insecure-requests przepisuje żądania zasobów podrzędnych http:// w zakresie (w tym żądania między źródłami) na https:// przed ich wysłaniem i przed uruchomieniem kontroli treści mieszanej/CSP — to siatka, a nie substytut naprawy źródła, bez rezerwy HTTP, jeśli uaktualnienie się nie powiedzie, i nie uaktualnia nawigacji najwyższego poziomu do źródeł zewnętrznych, więc nie zastępuje HSTS. Umieszczenie samej dyrektywy w trybie tylko raportowania to brak operacji — monitoruj za pomocą osobnej polityki tylko raportowania. Bazy danych CMS (wykonaj kopię zapasową i przetestuj każdą zamianę — naiwna zamiana ciągów może uszkodzić dane serializowane), wtyczki, motywy, pracownicy usług/pamięci podręczne oraz tagi reklam/analityczne to powracający recydywiści — audytuj na dużą skalę, a nie strona po stronie.

Centrum HTTPS przedstawia treść mieszaną jako jeden z dwóch trybów awarii pierwszego dnia migracji (drugim są przekierowania). To jest szczegółowe omówienie, do którego prowadzi — dokładne poziomy zasobów, stos wykrywania, dyrektywy CSP oraz operacyjne powody, dla których wciąż powraca.

Co jest treścią mieszaną, a co nie

Treść mieszana jest precyzyjnie zdefiniowana: dotyczy zasobów podrzędnych ładowanych przez stronę, a nie linków zawartych na stronie. Definicja Google: „Strona ma treść mieszaną, gdy jej początkowy HTML jest ładowany przez bezpieczne połączenie HTTPS, ale inne zasoby (takie jak obrazy, wideo, arkusze stylów i skrypty) są ładowane przez niezabezpieczone połączenie HTTP.” Dowód potwierdzający to twierdzenie Mixed content occurs when a secure page loads resources over insecure HTTP, and browsers upgrade or block mixed-content requests by resource type. Zakres: MDN documents current browser categories and behavior; individual browser versions may differ at the margins. Poziom ufności: wysoki · Zweryfikowano: MDN: Mixed content

Pułapką, która fałszywie uspokaja, jest znacznik kotwicy. Link <a href="http://…"> do strony HTTP nie jest treścią mieszaną — prowadzi do nowego dokumentu; nie ładuje niezabezpieczonego zasobu do bieżącego zabezpieczonego. Dotyczy to każdej nawigacji najwyższego poziomu do strony HTTP, nie tylko kliknięć kotwic.

Mimo to warto wysyłać linki wychodzące do miejsc docelowych HTTPS. Przy nowoczesnej przeglądarce domyślna Referrer-Policy (strict-origin-when-cross-origin) sprawia, że kliknięcie ze strony HTTPS do miejsca docelowego HTTP faktycznie pomija nagłówek Referer, co może zniekształcić analitykę odsyłaczy — ale to zachowanie jest zależne od polityki i przeglądarki, a nie uniwersalną zasadą: strona (lub pośredniczący proxy/CDN), która ustawia luźniejszą Referrer-Policy, może nadal wysyłać odsyłacz przy tym obniżeniu. Sprawdź faktyczną Referrer-Policy obowiązującą, zanim stwierdzisz, ile danych o odsyłaczach dana witryna traci — ale w każdym razie to osobny problem od treści mieszanej, a nie sama treść mieszana.

Aktywne a pasywne: rozróżnienie, które wyznacza Twoje priorytety

Nowoczesna dokumentacja przeglądarek i W3C klasyfikuje treści mieszane przede wszystkim jako uaktualnialne versus blokowalne — typy zasobów, które przeglądarka będzie po cichu ponawiać przez HTTPS, versus te, których odmawia wprost — a nie jako starszy podział aktywny/pasywny. Podział aktywny/pasywny jest nadal użytecznym skrótem dla dlaczego przeglądarki wyznaczają tę linię (jak dużą część strony zasób mógłby naruszyć) i tak właśnie przedstawia to własny wyjaśniacz Google, więc poniżej pozostaje jako główna rama triażu — po prostu nie traktuj go jako aktualnej oficjalnej taksonomii, gdy musisz rozumować o konkretnym typie zasobu; zobacz wyjątki po dwóch listach.

Przeglądarki klasyfikują treści mieszane według tego, jak dużą część strony niebezpieczny zasób mógłby narazić. Google: “Active mixed content poses a greater threat than passive mixed content.” (tłumaczenie) „Aktywne treści mieszane stanowią większe zagrożenie niż pasywne treści mieszane.” To jedno zdanie powinno kierować Twoją kolejnością triażu.

Aktywne treści mieszane wchodzą w interakcję z — i mogą przejąć — całą stronę. Google opisuje je jako “scripts, stylesheets, iframes, and any other code the browser can download and execute.” (tłumaczenie) „skrypty, arkusze stylów, iframe’y i każdy inny kod, który przeglądarka może pobrać i wykonać”. W praktyce lista aktywnych elementów to:

  • <script src="http://…"> — najgorszy przypadek; przechwycony skrypt może przepisać cały DOM, wykraść dane formularzy lub wstrzyknąć treść.
  • <link rel="stylesheet" href="http://…"> — CSS może ukryć, przesunąć lub nałożyć cokolwiek, więc jest traktowane jako aktywne.
  • <iframe src="http://…"> — osadzony niebezpieczny dokument wewnątrz Twojego bezpiecznego.
  • XMLHttpRequest / fetch() do http:// — niebezpieczne dane, na których strona następnie działa.
  • Czcionki internetowe, zasoby <object>/<embed> oraz warianty <link>, które pobierają treści wykonywalne lub kontrolujące układ.

Ponieważ naruszony aktywny zasób może przepisać stronę, “Most browsers already block this type of content by default to protect users.” (tłumaczenie) „Większość przeglądarek już domyślnie blokuje ten typ treści, aby chronić użytkowników”. Dlatego aktywne treści mieszane to to, co widocznie psuje rzeczy po migracji — zablokowany arkusz stylów usuwa Twój CSS, zablokowany skrypt zabija interaktywność, zablokowany iframe pozostawia dziurę. Najpierw napraw aktywne. To funkcjonalny błąd, a nie tylko ostrzeżenie bezpieczeństwa.

Pasywne (wyświetlane) treści mieszane — Google: “including images, video, and audio” (tłumaczenie) „w tym obrazy, wideo i audio” — “doesn’t interact with the rest of the page.” (tłumaczenie) „nie wchodzą w interakcję z resztą strony.” Przechwycony obraz może zostać zamieniony, ale nie może przejąć dokumentu. Dlatego historycznie przeglądarki ładowały go i tylko obniżały wskaźnik: “Until recently, passive mixed content was loaded in all browsers, because blocking it would have broken many websites. This is now beginning to change.” (tłumaczenie) „Do niedawna pasywne treści mieszane były ładowane we wszystkich przeglądarkach, ponieważ ich blokowanie zepsułoby wiele stron internetowych. To się teraz zaczyna zmieniać.” Kierunek zmian w przeglądarkach zmierza w stronę automatycznego uaktualniania zasobów pasywnych do HTTPS tam, gdzie to możliwe, i blokowania tych, których nie można uaktualnić, więc „pasywne = nieszkodliwe” nie jest już bezpiecznym założeniem, na którym można budować.

Wyjątki, których nie obejmuje podział aktywny/pasywny

Linia uaktualnialne/blokowalne ma kilka wyjątków, które nie podążają za ogólnym wzorem „obrazy uaktualniane, skrypty blokowane” powyżej — to przypadki, które w praktyce najczęściej sprawiają ludziom problemy:

  • Żądania obrazów z włączonym CORS są wymuszanie odrzucane, a nie ulepszane. Zwykły <img src="http://…"> jest ulepszalny, ale żądanie obrazu z ustawionym crossorigin jest traktowane inaczej przez algorytm mieszanych treści i kończy się niepowodzeniem zamiast cichego ulepszenia.
  • Kandydaci srcset i <picture> są blokowalni, a nie ulepszalni. Ten sam obraz, żądany przez mechanizm obrazów responsywnych zamiast zwykłego src, wpada do kategorii blokowalnych — nie zakładaj, że każde odwołanie do obrazu zachowuje się tak samo.
  • Hosty z adresami IP są blokowane, a nie ulepszane, nawet dla w inny sposób ulepszalnego typu zasobu. Odwołanie takie jak http://203.0.113.5/logo.png nie otrzymuje automatycznego ulepszenia, które otrzymałby odpowiednik hostowany na domenie.
  • Zagnieżdżone konteksty i pracownicy są w zakresie. Sprawdzanie mieszanych treści dotyczy również iframe oraz pracowników usługowych/współdzielonych, nie tylko głównego dokumentu — pracownik pobierający niezabezpieczony skrypt nadal stanowi mieszaną treść.
  • Lokalne i pętlowe pochodzenie mają swoją własną niuans. localhost, adresy pętlowe i konteksty file:// są „potencjalnie zaufanymi pochodzeniami” zgodnie ze specyfikacją nawet bez TLS, więc prosta heurystyka HTTP-vs-HTTPS nie odwzorowuje się czysto na lokalne środowiska programistyczne.
  • Niebezpieczne pobierania to pokrewna, ale oddzielna granica. Pobieranie zainicjowane z bezpiecznej strony przez http:// to realne ryzyko, ale podlega własnemu mechanizmowi bezpieczeństwa pobierania, a nie regułom mieszanych treści dla podzasobów w tej sekcji.
  • Nawigacja HTTP na najwyższym poziomie nadal nie jest mieszaną treścią, w tym przypadek linku kotwicowego powyżej — to właściwość nawigacji, a nie ładowanego podzasobu, niezależnie od tego, ile z tych innych wyjątków ma zastosowanie.

Wykrywanie mieszanych treści — cały stos

Nie ma jednego przycisku, a każda warstwa poniżej odpowiada na inne pytanie — czysty wynik na jednej warstwie nie zwalnia z pozostałych. Diagnozuj pobrane źródło (co faktycznie odwołuje się w surowym HTML), stan renderowania/czasu wykonania (co przeglądarka żąda po przeanalizowaniu strony i uruchomieniu skryptów) oraz rzeczywiste sesje użytkowników (co dzieje się dla odwiedzającego za banerem zgody, przekierowaniem geograficznym, ścianą logowania lub tagiem strony trzeciej, który uruchamia się tylko w określonych warunkach) osobno. Nakładaj te warstwy od „jednej strony” do „całej witryny”:

  1. Konsola Chrome DevTools (stan renderowania/czasu wykonania). Załaduj stronę HTTPS i otwórz konsolę. Zablokowana aktywna mieszana treść rejestruje komunikat w stylu “Mixed Content: The page … was loaded over HTTPS, but requested an insecure … This request has been blocked; the content must be served over HTTPS.” (tłumaczenie) „Mieszana treść: strona … została załadowana przez HTTPS, ale zażądała niezabezpieczonego zasobu. To żądanie zostało zablokowane; treść musi być serwowana przez HTTPS.” Pasywna treść, która jest ładowana, rejestruje ostrzeżenie zamiast blokady. Panel Security (lub zakładka Issues) grupuje to per strona. Szybkie do sprawdzeń punktowych i potwierdzania konkretnej poprawki — ale traktuj dokładne brzmienie komunikatu, układ panelu, a nawet to, które typy zasobów są blokowane, jako zależne od przeglądarki i wersji; zostało to potwierdzone w Chrome według stanu na 2026-07 i powinieneś zweryfikować aktualne brzmienie na faktycznej przeglądarce/wersji, którą diagnozujesz, zamiast cytować je jako stały ciąg UI, i spodziewaj się, że Firefox, Safari i Edge będą się różnić.

  2. Crawler witryny (pobrane źródło, na dużą skalę). DevTools jest per strona; crawl jest ogólnowitrzynowy. Ahrefs Site Audit i Screaming Frog oba flagują strony, które odwołują się do podzasobów http:// na stronie HTTPS — jedyny realistyczny sposób na znalezienie mieszanych treści wśród tysięcy URL-i. To główne narzędzie do audytu, ale nadal czyta źródło: czysty crawl nie dowodzi, że wyrenderowana strona lub prawdziwa sesja też są czyste — zapisuj, która przeglądarka/narzędzie/wersja wyprodukowała dany wynik, zamiast raportować jeden niekwalifikowany wynik pozytywny/negatywny.

  3. Raportowanie naruszeń CSP (rzeczywiste sesje użytkowników). Możesz sprawić, by przeglądarki prawdziwych odwiedzających raportowały Ci mieszane treści, co pozwala wykryć zasoby, które ładują się tylko na niektórych stronach, dla niektórych użytkowników, w określonych stanach zgody lub z tagów stron trzecich, których nie kontrolujesz — warstwa, do której nie dociera ani crawl, ani pojedyncze sprawdzenie w DevTools. web.dev: “You can use content security policy to collect reports of mixed content on your site. To enable this feature, set the Content-Security-Policy-Report-Only directive by adding it as a response header for your site.” (tłumaczenie) „Możesz użyć polityki bezpieczeństwa treści, aby zbierać raporty o mieszanych treściach w swojej witrynie. Aby włączyć tę funkcję, ustaw dyrektywę Content-Security-Policy-Report-Only, dodając ją jako nagłówek odpowiedzi dla swojej witryny.” Tryb Report-Only raportuje naruszenia bez egzekwowania polityki, więc możesz zmierzyć problem w produkcji, zanim włączysz blokowanie. (Mechanizm to nowoczesny nagłówek report-to / Reporting-Endpoints lub starszy report-uri. Zauważ, że to inna, ogólnego przeznaczenia polityka tylko do raportowania niż samo upgrade-insecure-requests — umieszczenie tej konkretnej dyrektywy w trybie tylko do raportowania nie działa, co omówiono poniżej.)

Dowód potwierdzający to twierdzenie upgrade-insecure-requests in a Content-Security-Policy-Report-Only header is ignored. Zakres: Content Security Policy upgrade-insecure-requests processing Poziom ufności: wysoki · Zweryfikowano: Upgrade Insecure Requests

Użyj wszystkich trzech: DevTools do weryfikacji wyrenderowanej strony, crawlera do inwentaryzacji pobranego źródła, raportów CSP do wychwycenia długiego ogona rzeczywistych sesji, który ujawnia się tylko w prawdziwym środowisku. Jeden przechodzący crawl to dowód dotyczący źródła, a nie gwarancja, że każdy stan zgody, wariant ad-tech, gałąź personalizacji czy worker jest czysty.

Naprawa u źródła

Prawdziwa naprawa zaczyna się, zanim dotkniesz pojedynczego odwołania: zweryfikuj, że odpowiednik HTTPS faktycznie istnieje, ma ważny certyfikat i zwraca treści, których oczekujesz — nie zakładaj, że zamiana schematu jest bezpieczna tylko dlatego, że domena się rozwiązuje. Gdy to potwierdzisz, każde odwołanie do zasobu podrzędnego powinno rozwiązywać się przez HTTPS. Opcje poniżej są w przybliżonej kolejności preferencji, ale każda z nich nadal zależy od własności i kontekstu, a nie tylko od wpisywanego ciągu znaków:

  • Bezwzględne adresy URL HTTPS — zmień http://cdn.example.com/app.js na https://cdn.example.com/app.js. Jawne i jednoznaczne; najbezpieczniejsza opcja domyślna, gdy nie masz pewności co do kontekstu serwowania opisanego poniżej.
  • Ścieżki względne do katalogu głównego lub względne — w przypadku zasobów, które posiadasz w tej samej witrynie, /assets/app.js automatycznie dziedziczy schemat strony. Wytyczne Google dotyczące HTTPS: “Make sure intrasite URLs and external URLs don’t depend on a specific protocol. Use relative paths or leave out the protocol as in //example.com/something.js.” (tłumaczenie) „Upewnij się, że adresy URL wewnątrz witryny i zewnętrzne nie zależą od konkretnego protokołu. Używaj ścieżek względnych lub pomiń protokół, jak w //example.com/something.js.” Traktuj to jako warunkowe, a nie uniwersalne zalecenie: ma zastosowanie tylko wtedy, gdy potwierdzisz, że faktycznie posiadasz zasób (ścieżka względna do zasobu strony trzeciej nie ma sensu), że rzeczywisty bazowy adres URL strony rozwiązuje się tak, jak oczekujesz (tag <base>, ścieżka przez proxy lub kontekst osadzony/AMP mogą zmienić znaczenie „względny”), oraz że nic w dalszej części łańcucha nie odtwarza adresu URL w sposób, który ponownie wprowadza http:// — na przykład kod po stronie klienta budujący adres URL z window.location lub zapisanej wartości bezwzględnej.
  • Adresy URL względne protokołu (//example.com/something.js) nadal działają, ale nie są preferowanym uniwersalnym rozwiązaniem — ogranicz je do tych samych kontroli własności/bazowego adresu URL co powyżej, a nie tylko z przyzwyczajenia. W sieci w pełni opartej na HTTPS jawny https:// jest zwykle jaśniejszy i pozwala uniknąć niespodzianek, jeśli plik zostanie kiedykolwiek otwarty z kontekstu innego niż HTTP; sięgaj po adresy względne protokołu tylko wtedy, gdy masz konkretny powód, aby nie kodować na sztywno schematu.

Na dużą skalę prawie nigdy nie edytujesz szablonów ręcznie, jeden po drugim — ale nie uruchamiaj też niechronionej zamiany ciągów znaków w bazie danych na produkcji. http://yourdomainhttps://yourdomain wygląda jak prosta operacja znajdź i zamień, a w przypadku pól tekstowych często jest bezpieczna, ale treść CMS może być serializowana lub ustrukturyzowana (tablice serializowane w PHP, pliki JSON, dane edytora blokowego), gdzie naiwna zamiana podciągu uszkadza rekord zamiast go naprawić. Użyj narzędzi świadomych aplikacji, które rozumieją format serializacji, najpierw wykonaj kopię zapasową bazy danych i przetestuj zamianę, aby móc przejrzeć dotknięte wiersze przed zatwierdzeniem. Następnie napraw kilka plików szablonów/konfiguracji, które generują adresy URL; crawler i raporty CSP zajmą się pozostałymi przypadkami.

upgrade-insecure-requests: siatka bezpieczeństwa (i jej ograniczenia)

Proaktywnym zabezpieczeniem jest dyrektywa Content-Security-Policy. web.dev: “The upgrade-insecure-requests CSP directive instructs the browser to upgrade insecure URLs before making network requests.” (tłumaczenie) „Dyrektywa CSP upgrade-insecure-requests nakazuje przeglądarce uaktualnić niezabezpieczone adresy URL przed wysłaniem żądań sieciowych.” Ustaw nagłówek:

Content-Security-Policy: upgrade-insecure-requests

Według MDN dyrektywa traktuje wszystkie niezabezpieczone adresy witryny obsługiwane przez HTTP tak, jakby zastąpiono je bezpiecznymi adresami HTTPS. Konkretnie uaktualnia “requests to load resources (such as images, scripts, or fonts),” (tłumaczenie) „żądania ładowania zasobów, takich jak obrazy, skrypty lub czcionki”; “navigation requests (such as link targets) which are same-origin with the document,” (tłumaczenie) „żądania nawigacji, takie jak cele linków, pochodzące z tego samego źródła co dokument”; “navigation requests in nested browsing contexts, such as iframes,” (tłumaczenie) „żądania nawigacji w zagnieżdżonych kontekstach przeglądania, takich jak iframe’y”; oraz wysyłanie formularzy. Dowód potwierdzający to twierdzenie The upgrade-insecure-requests CSP directive rewrites insecure URLs as secure URLs before requests are made. Zakres: MDN documents the directive's rewriting behavior and limits; it does not guarantee that an HTTPS version of every resource exists. Poziom ufności: wysoki · Zweryfikowano: MDN: CSP upgrade-insecure-requests

Dwa szczegóły operacyjne mają znaczenie poza tym cytatem. Po pierwsze, aktualizacja zasobów podrzędnych nie jest ograniczona do żądań samego pochodzenia — to aktualizacja nawigacji jest ograniczona do samego pochodzenia, zgodnie z cytatem powyżej; zwykłe żądania zasobów podrzędnych są przepisywane również między pochodzeniami, więc skrypt hostowany na CDN lub czcionka innej firmy zostaną zaktualizowane, a nie tylko zasoby z tej samej witryny. Po drugie, przepisanie następuje przed sprawdzeniem przez przeglądarkę mieszanych treści i CSP, dlatego zasób, który w przeciwnym razie zostałby całkowicie zablokowany jako mieszana treść, może zostać załadowany czysto po aktualizacji — aktualizacja wyprzedza blokadę.

Trzy ograniczenia, których nie wolno ignorować:

  • Nie aktualizuje nawigacji najwyższego poziomu innych firm. MDN: “However, top-level navigation requests whose target is a different origin will not be upgraded.” (tłumaczenie) „Jednak żądania nawigacji najwyższego poziomu, których celem jest inne pochodzenie, nie zostaną uaktualnione”. Z tego powodu dyrektywa wyraźnie nie zastępuje HSTS: nie zapewnia przejścia na HTTPS użytkownikom wchodzącym z odsyłaczy w witrynach zewnętrznych. (Więcej o tym podziale poniżej.)
  • To siatka, a nie naprawa, i nie ma trybu awaryjnego. Jeśli zasób naprawdę nie jest dostępny przez HTTPS, zaktualizowane żądanie po prostu kończy się niepowodzeniem — nie wraca do oryginalnej wersji http://. Oczyszczenie źródła to nadal zadanie; dyrektywa obejmuje to, co przeoczyłeś, a nie to, co jest naprawdę zepsute.
  • Tryb tylko do raportowania nie wykonuje aktualizacji — to operacja bez efektu. Umieszczenie upgrade-insecure-requests w nagłówku Content-Security-Policy-Report-Only jest ignorowane przez przeglądarkę: nic nie jest przepisywane i nic nie jest dla niego raportowane również. Jeśli chcesz uzyskać wgląd w to, na co aktualizacja wpłynęłaby przed jej wdrożeniem, uruchom osobną, ogólną politykę tylko do raportowania, która raportuje niedozwolone miejsca docelowe http:// (to samo podejście default-src https: tylko do raportowania używane do wykrywania powyżej) — nie uzyskasz tego wglądu, czyniąc upgrade-insecure-requests samą tylko do raportowania.

block-all-mixed-content — głównie historyczne

Istnieje towarzysząca dyrektywa, block-all-mixed-content, która — według MDN — “zapobiega ładowaniu jakichkolwiek zasobów przez HTTP, gdy strona używa HTTPS,” w tym “zarówno blokowalnych, jak i ulepszalnych treści mieszanych,” i dotyczy również iframe’ów. W praktyce została zastąpiona. MDN oznacza ją jako przestarzałą i “nieaktualną w specyfikacji,” zauważając: “Treści, które nie są blokowane, są teraz zawsze ulepszane do bezpiecznego połączenia, więc ta dyrektywa nie jest potrzebna.” Sięgaj po upgrade-insecure-requests; traktuj block-all-mixed-content jako przestarzałość, którą możesz odziedziczyć, a nie coś do wdrożenia na nowo. Jeśli już wysyłasz upgrade-insecure-requests, block-all-mixed-content nie ma nic do zrobienia dla ulepszonych żądań — przepisanie ulepszenia następuje najpierw, więc do czasu, gdy miałoby zostać uruchomione sprawdzenie blokowania, żądanie zostało już ulepszone (lub już się nie powiodło). To nie tylko przestarzałość; to redundancja wszędzie tam, gdzie UIR jest już wdrożone.

Dowód potwierdzający to twierdzenie block-all-mixed-content is deprecated and obsolete for new deployment. Zakres: legacy CSP directives Poziom ufności: wysoki · Zweryfikowano: CSP: block-all-mixed-content

Dlaczego Twój CMS ciągle to wprowadza ponownie

Treści mieszane to nie jednorazowe sprzątanie — one powracają, ponieważ kilka systemów po cichu ponownie wstrzykuje adresy URL http://, gdy myślisz, że już skończyłeś:

  • Baza treści. W WordPress, Drupal i większości systemów CMS, redaktorzy wklejają obrazy i osadzenia z bezwzględnymi adresami URL http:// bezpośrednio do treści wpisów. Te żyją w bazie danych, a nie w szablonie, więc poprawka na poziomie kodu nigdy ich nie dotyka — stąd wyszukiwanie i zamiana w bazie danych.
  • Motywy i wtyczki. Motyw lub wtyczka, która na sztywno koduje adres URL zasobu http:// (czcionkę, skrypt, obraz tła), wprowadza ponownie treści mieszane na każdej stronie, którą renderuje, a aktualizacja wtyczki może je przywrócić po tym, jak je wyczyściłeś.
  • Technologie reklamowe, analityka i tagi stron trzecich. Menedżery tagów, sieci reklamowe, widżety czatu i fragmenty analityczne ładują własne podzasoby — a jeśli tag dostawcy nadal wywołuje http://, to są treści mieszane, których nie możesz naprawić we własnym kodzie. To jest dokładnie ten długi ogon, do którego służą raporty CSP; trwałe rozwiązanie polega na naciskaniu na dostawcę, aby serwował przez HTTPS (lub porzuceniu tagu). Jeśli dostawca nie ma działającego punktu końcowego HTTPS, trwałe opcje są te same trzy: nakłonić ich do naprawy, zastąpić zależność lub ją porzucić — nie ma czwartej opcji, która utrzymywałaby niebezpieczną wersję w działaniu.
  • Pracownicy usług i pamięci podręczne. Pracownik usługi może buforować odpowiedź (lub samo żądanie), która nadal wskazuje na http://, i będzie nadal serwować tę nieaktualną referencję przy powtórnych wizytach, nawet po naprawieniu źródła. Odtwórz podejrzewaną poprawkę w sesji incognito/bez pamięci podręcznej, zanim uznasz, że nie zadziałała, i upewnij się, że wdrożenie zmieniające adresy URL zasobów również zwiększa wersję pracownika usługi/pamięci podręcznej, aby nieaktualne wpisy zostały usunięte, a nie odtworzone.
  • Na sztywno zakodowane http:// w starych treściach oraz szablonach e-mail/druku, które są ponownie używane.

Praktyczny wniosek: wbuduj wykrywanie w cykliczny audyt (crawler + raporty CSP), a nie w jednorazową listę kontrolną na dzień premiery.

Jak treści mieszane współdziałają z HSTS

Treści mieszane i HSTS rozwiązują sąsiednie, ale różne problemy, a ich mylenie jest częstym błędem:

  • upgrade-insecure-requests naprawia podzasoby, o które prosi Twoja własna bezpieczna strona — ulepsza obrazy/skrypty/iframe’y, które strona pobiera.
  • HSTS (Strict-Transport-Security) wymusza nawigację najwyższego poziomu do Twojej witryny na HTTPS — nawet pierwsze żądanie, zanim zadziała jakiekolwiek przekierowanie — i chroni przed atakami typu SSL-stripping. Google przedstawia HSTS jako sposób na “uniknięcie kosztu przekierowania 301” i na “pokonanie ataków takich jak SSL Stripping.”

Nie zastępują się nawzajem. Jak wyjaśnia MDN, upgrade-insecure-requests „nie zapewni, że użytkownicy odwiedzający Twoją witrynę za pośrednictwem linków na stronach osób trzecich zostaną przeniesieni na HTTPS dla nawigacji najwyższego poziomu, a zatem nie zastępuje nagłówka Strict-Transport-Security (HSTS).” W pełni zabezpieczona konfiguracja wykorzystuje oba: upgrade-insecure-requests (lub czyste adresy URL źródeł), aby bezpieczna strona nie zawierała niezabezpieczonych zasobów, oraz HSTS, aby nikt nie docierał do witryny przez HTTP w pierwszej kolejności. I zwykłe zastrzeżenie dotyczące HSTS nadal obowiązuje — Google: „Nie włączaj HSTS, dopóki nie będziesz pewien, że działanie Twojej witryny jest wystarczająco solidne, aby uniknąć kiedykolwiek wdrażania HTTPS z błędami walidacji certyfikatu,” a preload jest bliski drzwiom jednokierunkowym.

Czy mieszana treść szkodzi SEO bezpośrednio?

Zacznij od bezpośrednich skutków, ponieważ to one są tym, co faktycznie kontrolujesz: mieszana treść jest przede wszystkim problemem bezpieczeństwa i funkcjonalności. Zablokowana aktywna mieszana treść całkowicie psuje renderowanie i interaktywność — brakujący arkusz stylów lub skrypt to realna regresja, niezależnie od tego, co wyszukiwarka sobie o tym pomyśli. To wystarczający powód, aby naprawić to, zanim w ogóle pomyślisz o rankingach.

Konsekwencje SEO są realne, ale warunkowe, nie bezpośrednie ani gwarantowane. Obecne oficjalne wytyczne Google nie ustanawiają naprawiania mieszanej treści jako bezpośredniego wzmocnienia rankingu — sam sygnał rankingowy HTTPS opiera się na schemacie (czy URL zaczyna się od https://), a nie na kontroli czystości podzasobów, więc pojedynczy niezabezpieczony obraz sam w sobie nie kosztuje Cię „sygnału HTTPS”. Ale skutki pośrednie mogą się nadal pojawić w zależności od tego, co faktycznie jest zepsute: jeśli Googlebot renderuje stronę, której CSS lub JS został zablokowany jako mieszana treść, może zaindeksować zepsutą lub niekompletną wersję; obniżony wskaźnik bezpieczeństwa może zaszkodzić zaufaniu użytkowników, zaangażowaniu i konwersjom nawet bez żadnej zmiany w rankingu; a ogólna preferencja Google dla kanonicznych HTTPS jest sama w sobie warunkowa — nieprawidłowe certyfikaty, niezabezpieczone zależności, przekierowania HTTPS-na-HTTP lub sprzeczne sygnały kanoniczne gdzie indziej na stronie mogą zmienić to, który URL zostanie wybrany, niezależnie od mieszanej treści. Traktuj efekty renderowania, indeksowania, kanonizacji i analityki jako rzeczy do zweryfikowania na własnych stronach, a nie uniwersalne wyniki do obiecywania — i napraw mieszaną treść przede wszystkim ze względów bezpieczeństwa i funkcjonalności.

To znajduje się w szerszym temacie HTTPS dla SEO, który obejmuje plan migracji, wagę sygnału rankingowego i HSTS w pełni; jeśli debugujesz również sam certyfikat (błędy łańcucha, wygaśnięcie, DV/OV/EV), to jest to poboczny szczegółowy przewodnik.

Dodaj notatkę eksperta

Przypnij cytat eksperta

Nowa osoba? Najpierw utwórz jej nieprzejęty profil na /admin/experts/ → Przypnij cytat eksperta .